@banta/sdk 5.4.0 → 5.5.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 (138) hide show
  1. package/{esm2020 → esm2022}/banta-sdk.mjs +4 -4
  2. package/{esm2020 → esm2022}/lib/attachment-scraper.mjs +1 -1
  3. package/esm2022/lib/banta/banta.component.mjs +204 -0
  4. package/{esm2020 → esm2022}/lib/banta-logo.component.mjs +11 -11
  5. package/{esm2020 → esm2022}/lib/banta-sdk.module.mjs +135 -135
  6. package/esm2022/lib/chat/banta-chat/banta-chat.component.mjs +209 -0
  7. package/esm2022/lib/chat/chat-message/chat-message.component.mjs +62 -0
  8. package/esm2022/lib/chat/chat-view/chat-view.component.mjs +170 -0
  9. package/{esm2020 → esm2022}/lib/chat/chat.module.mjs +51 -51
  10. package/{esm2020 → esm2022}/lib/chat/index.mjs +5 -5
  11. package/esm2022/lib/chat/live-chat-message.component.mjs +80 -0
  12. package/{esm2020 → esm2022}/lib/chat-backend-base.mjs +30 -30
  13. package/esm2022/lib/chat-backend.mjs +194 -0
  14. package/{esm2020 → esm2022}/lib/chat-source-base.mjs +1 -1
  15. package/esm2022/lib/chat-source.mjs +233 -0
  16. package/esm2022/lib/comments/attachment-button/attachment-button.component.mjs +76 -0
  17. package/esm2022/lib/comments/attachment-scraper.directive.mjs +107 -0
  18. package/esm2022/lib/comments/banta-comments/banta-comments.component.mjs +748 -0
  19. package/esm2022/lib/comments/comment/comment.component.mjs +175 -0
  20. package/esm2022/lib/comments/comment-field/comment-field.component.mjs +401 -0
  21. package/esm2022/lib/comments/comment-sort/comment-sort.component.mjs +37 -0
  22. package/esm2022/lib/comments/comment-view/comment-view.component.mjs +470 -0
  23. package/{esm2020 → esm2022}/lib/comments/comments.module.mjs +111 -111
  24. package/{esm2020 → esm2022}/lib/comments/index.mjs +10 -10
  25. package/esm2022/lib/comments/live-comment.component.mjs +80 -0
  26. package/{esm2020 → esm2022}/lib/comments/reply-send-options.directive.mjs +13 -13
  27. package/esm2022/lib/common/attachment/attachment.component.mjs +128 -0
  28. package/{esm2020 → esm2022}/lib/common/attachments/attachments.component.mjs +75 -75
  29. package/{esm2020 → esm2022}/lib/common/common.module.mjs +68 -68
  30. package/{esm2020 → esm2022}/lib/common/index.mjs +10 -10
  31. package/{esm2020 → esm2022}/lib/common/lazy-connection.mjs +14 -14
  32. package/esm2022/lib/common/lightbox/lightbox.component.mjs +31 -0
  33. package/esm2022/lib/common/markdown-to-html.pipe.mjs +88 -0
  34. package/esm2022/lib/common/mention-linker.pipe.mjs +35 -0
  35. package/esm2022/lib/common/timer-pool.service.mjs +83 -0
  36. package/esm2022/lib/common/timestamp.component.mjs +123 -0
  37. package/{esm2020 → esm2022}/lib/common/trust-resource-url.pipe.mjs +22 -22
  38. package/esm2022/lib/emoji/emoji-selector-button.component.mjs +115 -0
  39. package/esm2022/lib/emoji/emoji-selector-panel/emoji-selector-panel.component.mjs +98 -0
  40. package/{esm2020 → esm2022}/lib/emoji/emoji.module.mjs +55 -55
  41. package/{esm2020 → esm2022}/lib/emoji/emojis.mjs +6507 -6507
  42. package/{esm2020 → esm2022}/lib/emoji/index.mjs +4 -4
  43. package/esm2022/lib/giphy-attachments.mjs +16 -0
  44. package/{esm2020 → esm2022}/lib/index.mjs +19 -19
  45. package/{esm2020 → esm2022}/lib/live-message.component.mjs +61 -61
  46. package/{esm2020 → esm2022}/lib/message-menu-item.mjs +1 -1
  47. package/{esm2020 → esm2022}/lib/sdk-options.mjs +1 -1
  48. package/esm2022/lib/static-chat-source.mjs +71 -0
  49. package/esm2022/lib/tweet-attachments.mjs +13 -0
  50. package/esm2022/lib/url-attachments.mjs +42 -0
  51. package/esm2022/lib/youtube-attachments.mjs +29 -0
  52. package/{esm2020 → esm2022}/public-api.mjs +4 -4
  53. package/{fesm2020 → fesm2022}/banta-sdk.mjs +10822 -10823
  54. package/fesm2022/banta-sdk.mjs.map +1 -0
  55. package/index.d.ts +5 -5
  56. package/lib/attachment-scraper.d.ts +15 -15
  57. package/lib/banta/banta.component.d.ts +58 -58
  58. package/lib/banta-logo.component.d.ts +5 -5
  59. package/lib/banta-sdk.module.d.ts +31 -31
  60. package/lib/chat/banta-chat/banta-chat.component.d.ts +79 -79
  61. package/lib/chat/chat-message/chat-message.component.d.ts +21 -21
  62. package/lib/chat/chat-view/chat-view.component.d.ts +52 -52
  63. package/lib/chat/chat.module.d.ts +15 -15
  64. package/lib/chat/index.d.ts +5 -5
  65. package/lib/chat/live-chat-message.component.d.ts +23 -23
  66. package/lib/chat-backend-base.d.ts +72 -72
  67. package/lib/chat-backend.d.ts +67 -67
  68. package/lib/chat-source-base.d.ts +44 -44
  69. package/lib/chat-source.d.ts +65 -65
  70. package/lib/comments/attachment-button/attachment-button.component.d.ts +17 -17
  71. package/lib/comments/attachment-scraper.directive.d.ts +21 -21
  72. package/lib/comments/banta-comments/banta-comments.component.d.ts +203 -203
  73. package/lib/comments/comment/comment.component.d.ts +72 -72
  74. package/lib/comments/comment-field/comment-field.component.d.ts +89 -89
  75. package/lib/comments/comment-sort/comment-sort.component.d.ts +16 -16
  76. package/lib/comments/comment-view/comment-view.component.d.ts +121 -121
  77. package/lib/comments/comments.module.d.ts +30 -30
  78. package/lib/comments/index.d.ts +10 -10
  79. package/lib/comments/live-comment.component.d.ts +23 -23
  80. package/lib/comments/reply-send-options.directive.d.ts +5 -5
  81. package/lib/common/attachment/attachment.component.d.ts +34 -34
  82. package/lib/common/attachments/attachments.component.d.ts +26 -26
  83. package/lib/common/common.module.d.ts +19 -19
  84. package/lib/common/index.d.ts +10 -10
  85. package/lib/common/lazy-connection.d.ts +6 -6
  86. package/lib/common/lightbox/lightbox.component.d.ts +14 -14
  87. package/lib/common/markdown-to-html.pipe.d.ts +15 -15
  88. package/lib/common/mention-linker.pipe.d.ts +13 -13
  89. package/lib/common/timer-pool.service.d.ts +15 -15
  90. package/lib/common/timestamp.component.d.ts +19 -19
  91. package/lib/common/trust-resource-url.pipe.d.ts +10 -10
  92. package/lib/emoji/emoji-selector-button.component.d.ts +30 -30
  93. package/lib/emoji/emoji-selector-panel/emoji-selector-panel.component.d.ts +26 -26
  94. package/lib/emoji/emoji.module.d.ts +16 -16
  95. package/lib/emoji/emojis.d.ts +6507 -6507
  96. package/lib/emoji/index.d.ts +4 -4
  97. package/lib/giphy-attachments.d.ts +5 -5
  98. package/lib/index.d.ts +19 -19
  99. package/lib/live-message.component.d.ts +22 -22
  100. package/lib/message-menu-item.d.ts +6 -6
  101. package/lib/sdk-options.d.ts +5 -5
  102. package/lib/static-chat-source.d.ts +42 -42
  103. package/lib/tweet-attachments.d.ts +5 -5
  104. package/lib/url-attachments.d.ts +14 -14
  105. package/lib/youtube-attachments.d.ts +5 -5
  106. package/package.json +5 -11
  107. package/public-api.d.ts +1 -1
  108. package/esm2020/lib/banta/banta.component.mjs +0 -204
  109. package/esm2020/lib/chat/banta-chat/banta-chat.component.mjs +0 -209
  110. package/esm2020/lib/chat/chat-message/chat-message.component.mjs +0 -62
  111. package/esm2020/lib/chat/chat-view/chat-view.component.mjs +0 -170
  112. package/esm2020/lib/chat/live-chat-message.component.mjs +0 -80
  113. package/esm2020/lib/chat-backend.mjs +0 -194
  114. package/esm2020/lib/chat-source.mjs +0 -233
  115. package/esm2020/lib/comments/attachment-button/attachment-button.component.mjs +0 -76
  116. package/esm2020/lib/comments/attachment-scraper.directive.mjs +0 -107
  117. package/esm2020/lib/comments/banta-comments/banta-comments.component.mjs +0 -749
  118. package/esm2020/lib/comments/comment/comment.component.mjs +0 -175
  119. package/esm2020/lib/comments/comment-field/comment-field.component.mjs +0 -401
  120. package/esm2020/lib/comments/comment-sort/comment-sort.component.mjs +0 -37
  121. package/esm2020/lib/comments/comment-view/comment-view.component.mjs +0 -470
  122. package/esm2020/lib/comments/live-comment.component.mjs +0 -80
  123. package/esm2020/lib/common/attachment/attachment.component.mjs +0 -128
  124. package/esm2020/lib/common/lightbox/lightbox.component.mjs +0 -31
  125. package/esm2020/lib/common/markdown-to-html.pipe.mjs +0 -88
  126. package/esm2020/lib/common/mention-linker.pipe.mjs +0 -35
  127. package/esm2020/lib/common/timer-pool.service.mjs +0 -83
  128. package/esm2020/lib/common/timestamp.component.mjs +0 -123
  129. package/esm2020/lib/emoji/emoji-selector-button.component.mjs +0 -116
  130. package/esm2020/lib/emoji/emoji-selector-panel/emoji-selector-panel.component.mjs +0 -98
  131. package/esm2020/lib/giphy-attachments.mjs +0 -16
  132. package/esm2020/lib/static-chat-source.mjs +0 -71
  133. package/esm2020/lib/tweet-attachments.mjs +0 -13
  134. package/esm2020/lib/url-attachments.mjs +0 -42
  135. package/esm2020/lib/youtube-attachments.mjs +0 -29
  136. package/fesm2015/banta-sdk.mjs +0 -11258
  137. package/fesm2015/banta-sdk.mjs.map +0 -1
  138. package/fesm2020/banta-sdk.mjs.map +0 -1
@@ -1,80 +0,0 @@
1
- import { Component, Input, Output } from '@angular/core';
2
- import { Subject } from 'rxjs';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "../chat-backend-base";
5
- import * as i2 from "@angular/common";
6
- import * as i3 from "./comment/comment.component";
7
- export class LiveCommentComponent {
8
- constructor(backend) {
9
- this.backend = backend;
10
- this._upvoted = new Subject();
11
- this._reported = new Subject();
12
- this._selected = new Subject();
13
- }
14
- get upvoted() {
15
- return this._upvoted;
16
- }
17
- get reported() {
18
- return this._reported;
19
- }
20
- get selected() {
21
- return this._selected;
22
- }
23
- get message() {
24
- return this._message;
25
- }
26
- set message(value) {
27
- let originalId = null;
28
- if (this._message)
29
- originalId = this._message.id;
30
- this._message = value;
31
- if (value && originalId === value.id) {
32
- return;
33
- }
34
- if (this.unsubscribe)
35
- this.unsubscribe();
36
- if (value) {
37
- this.unsubscribe = this.backend.watchMessage(value, message => this.message = message);
38
- }
39
- }
40
- report() {
41
- this._reported.next();
42
- }
43
- upvote() {
44
- this._upvoted.next();
45
- }
46
- select() {
47
- this._selected.next();
48
- }
49
- }
50
- LiveCommentComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: LiveCommentComponent, deps: [{ token: i1.ChatBackendBase }], target: i0.ɵɵFactoryTarget.Component });
51
- LiveCommentComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: LiveCommentComponent, selector: "banta-live-comment", inputs: { message: "message" }, outputs: { upvoted: "upvoted", reported: "reported", selected: "selected" }, ngImport: i0, template: `
52
- <banta-comment
53
- *ngIf="message"
54
- [message]="message"
55
- (upvoted)="upvote()"
56
- (reported)="report()"
57
- (selected)="select()"
58
- ></banta-comment>
59
- `, isInline: true, styles: [""], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.CommentComponent, selector: "banta-comment", inputs: ["message", "customMenuItems", "showReplyAction", "maxLength", "permissions", "mine", "editing", "genericAvatarUrl", "readonly"], outputs: ["liked", "unliked", "selected", "edited", "deleted", "editStarted", "editEnded", "shared", "userSelected", "usernameSelected", "avatarSelected", "reported", "loaded"] }] });
60
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: LiveCommentComponent, decorators: [{
61
- type: Component,
62
- args: [{ selector: 'banta-live-comment', template: `
63
- <banta-comment
64
- *ngIf="message"
65
- [message]="message"
66
- (upvoted)="upvote()"
67
- (reported)="report()"
68
- (selected)="select()"
69
- ></banta-comment>
70
- ` }]
71
- }], ctorParameters: function () { return [{ type: i1.ChatBackendBase }]; }, propDecorators: { upvoted: [{
72
- type: Output
73
- }], reported: [{
74
- type: Output
75
- }], selected: [{
76
- type: Output
77
- }], message: [{
78
- type: Input
79
- }] } });
80
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGl2ZS1jb21tZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Nkay9zcmMvbGliL2NvbW1lbnRzL2xpdmUtY29tbWVudC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpELE9BQU8sRUFBRSxPQUFPLEVBQWMsTUFBTSxNQUFNLENBQUM7Ozs7O0FBZ0IzQyxNQUFNLE9BQU8sb0JBQW9CO0lBQzdCLFlBQ1ksT0FBeUI7UUFBekIsWUFBTyxHQUFQLE9BQU8sQ0FBa0I7UUFNN0IsYUFBUSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFDL0IsY0FBUyxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFDaEMsY0FBUyxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7SUFMeEMsQ0FBQztJQU9ELElBQ0ksT0FBTztRQUNQLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFDSSxRQUFRO1FBQ1IsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUNJLFFBQVE7UUFDUixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQ0ksT0FBTztRQUNQLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN6QixDQUFDO0lBSUQsSUFBSSxPQUFPLENBQUMsS0FBSztRQUNiLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQztRQUN0QixJQUFJLElBQUksQ0FBQyxRQUFRO1lBQ2IsVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1FBRWxDLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBRXRCLElBQUksS0FBSyxJQUFJLFVBQVUsS0FBSyxLQUFLLENBQUMsRUFBRSxFQUFFO1lBQ2xDLE9BQU87U0FDVjtRQUVELElBQUksSUFBSSxDQUFDLFdBQVc7WUFDaEIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBRXZCLElBQUksS0FBSyxFQUFFO1lBQ1AsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxDQUFDO1NBQzFGO0lBQ0wsQ0FBQztJQUVELE1BQU07UUFDRixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxNQUFNO1FBQ0YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQsTUFBTTtRQUNGLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDMUIsQ0FBQzs7a0hBL0RRLG9CQUFvQjtzR0FBcEIsb0JBQW9CLHVLQVhuQjs7Ozs7Ozs7S0FRVDs0RkFHUSxvQkFBb0I7a0JBYmhDLFNBQVM7K0JBQ0ksb0JBQW9CLFlBQ3BCOzs7Ozs7OztLQVFUO3NHQWdCRyxPQUFPO3NCQURWLE1BQU07Z0JBTUgsUUFBUTtzQkFEWCxNQUFNO2dCQU1ILFFBQVE7c0JBRFgsTUFBTTtnQkFNSCxPQUFPO3NCQURWLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ2hhdE1lc3NhZ2UgfSBmcm9tICdAYmFudGEvY29tbW9uJztcclxuaW1wb3J0IHsgU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBDaGF0QmFja2VuZEJhc2UgfSBmcm9tICcuLi9jaGF0LWJhY2tlbmQtYmFzZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnYmFudGEtbGl2ZS1jb21tZW50JyxcclxuICAgIHRlbXBsYXRlOiBgXHJcbiAgICAgICAgPGJhbnRhLWNvbW1lbnQgXHJcbiAgICAgICAgICAgICpuZ0lmPVwibWVzc2FnZVwiXHJcbiAgICAgICAgICAgIFttZXNzYWdlXT1cIm1lc3NhZ2VcIlxyXG4gICAgICAgICAgICAodXB2b3RlZCk9XCJ1cHZvdGUoKVwiXHJcbiAgICAgICAgICAgIChyZXBvcnRlZCk9XCJyZXBvcnQoKVwiXHJcbiAgICAgICAgICAgIChzZWxlY3RlZCk9XCJzZWxlY3QoKVwiXHJcbiAgICAgICAgICAgID48L2JhbnRhLWNvbW1lbnQ+XHJcbiAgICBgLFxyXG4gICAgc3R5bGVzOiBbYGBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMaXZlQ29tbWVudENvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIGJhY2tlbmQgOiBDaGF0QmFja2VuZEJhc2VcclxuICAgICkge1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9tZXNzYWdlIDogQ2hhdE1lc3NhZ2U7XHJcbiAgICBwcml2YXRlIF91cHZvdGVkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICAgIHByaXZhdGUgX3JlcG9ydGVkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICAgIHByaXZhdGUgX3NlbGVjdGVkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuXHJcbiAgICBAT3V0cHV0KClcclxuICAgIGdldCB1cHZvdGVkKCkgOiBPYnNlcnZhYmxlPHZvaWQ+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdXB2b3RlZDtcclxuICAgIH1cclxuICAgIFxyXG4gICAgQE91dHB1dCgpXHJcbiAgICBnZXQgcmVwb3J0ZWQoKSA6IE9ic2VydmFibGU8dm9pZD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yZXBvcnRlZDtcclxuICAgIH1cclxuXHJcbiAgICBAT3V0cHV0KClcclxuICAgIGdldCBzZWxlY3RlZCgpIDogT2JzZXJ2YWJsZTx2b2lkPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBASW5wdXQoKVxyXG4gICAgZ2V0IG1lc3NhZ2UoKSA6IENoYXRNZXNzYWdlIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbWVzc2FnZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVuc3Vic2NyaWJlIDogRnVuY3Rpb247XHJcblxyXG4gICAgc2V0IG1lc3NhZ2UodmFsdWUpIHtcclxuICAgICAgICBsZXQgb3JpZ2luYWxJZCA9IG51bGw7XHJcbiAgICAgICAgaWYgKHRoaXMuX21lc3NhZ2UpXHJcbiAgICAgICAgICAgIG9yaWdpbmFsSWQgPSB0aGlzLl9tZXNzYWdlLmlkO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuX21lc3NhZ2UgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgaWYgKHZhbHVlICYmIG9yaWdpbmFsSWQgPT09IHZhbHVlLmlkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKHRoaXMudW5zdWJzY3JpYmUpXHJcbiAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcclxuICAgICAgICBcclxuICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSA9IHRoaXMuYmFja2VuZC53YXRjaE1lc3NhZ2UodmFsdWUsIG1lc3NhZ2UgPT4gdGhpcy5tZXNzYWdlID0gbWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJlcG9ydCgpIHtcclxuICAgICAgICB0aGlzLl9yZXBvcnRlZC5uZXh0KCk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHVwdm90ZSgpIHtcclxuICAgICAgICB0aGlzLl91cHZvdGVkLm5leHQoKTtcclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3QoKSB7XHJcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWQubmV4dCgpO1xyXG4gICAgfVxyXG59Il19
@@ -1,128 +0,0 @@
1
- import { Component, HostBinding, Input, Output } from "@angular/core";
2
- import { Subject } from "rxjs";
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "@angular/common";
5
- import * as i2 from "@angular/material/icon";
6
- import * as i3 from "@angular/cdk/bidi";
7
- import * as i4 from "@angular/material/progress-spinner";
8
- import * as i5 from "@angular/material/button";
9
- import * as i6 from "../trust-resource-url.pipe";
10
- let TWITTER_LOADED = false;
11
- export class BantaAttachmentComponent {
12
- constructor(elementRef) {
13
- this.elementRef = elementRef;
14
- this.loading = false;
15
- this.editing = false;
16
- this.loadingMessage = 'Please wait...';
17
- this.error = false;
18
- this.errorMessage = 'An error has occurred';
19
- this.removed = new Subject();
20
- this.activated = new Subject();
21
- this.loaded = new Subject();
22
- this._viewLoaded = false;
23
- }
24
- get attachment() { return this._attachment; }
25
- set attachment(value) {
26
- this._attachment = value;
27
- this.checkLoad();
28
- this.loadPlatformSpecific();
29
- }
30
- ngAfterViewInit() {
31
- this._viewLoaded = true;
32
- this.checkLoad();
33
- }
34
- loadTwitterWidgets() {
35
- if (typeof window !== 'undefined')
36
- window['twttr']?.widgets.load();
37
- }
38
- loadPlatformSpecific() {
39
- if (typeof window === 'undefined')
40
- return;
41
- if (this._attachment?.type === 'tweet') {
42
- if (!TWITTER_LOADED && document.querySelector('script[src="https://platform.twitter.com/widgets.js"]'))
43
- TWITTER_LOADED = true;
44
- if (typeof window !== 'undefined' && !TWITTER_LOADED) {
45
- TWITTER_LOADED = true;
46
- let script = document.createElement('script');
47
- script.src = 'https://platform.twitter.com/widgets.js';
48
- script.async = true;
49
- script.addEventListener('load', () => setTimeout(() => this.loadTwitterWidgets()));
50
- document.body.appendChild(script);
51
- }
52
- else {
53
- setTimeout(() => this.loadTwitterWidgets());
54
- }
55
- }
56
- }
57
- checkLoad() {
58
- if (!this._attachment || !this._viewLoaded || !this.elementRef?.nativeElement)
59
- return;
60
- if (typeof window === 'undefined')
61
- this.loaded.next();
62
- else
63
- setTimeout(() => this.loaded.next(), 250);
64
- }
65
- activate() {
66
- this.activated.next();
67
- }
68
- remove() {
69
- this.removed.next();
70
- }
71
- get isError() {
72
- return this.error || this.attachment?.transientState?.error;
73
- }
74
- get theErrorMessage() {
75
- return this.errorMessage || this.attachment?.transientState?.errorMessage;
76
- }
77
- get isLoading() {
78
- return this.editing && (this.loading || !this.attachment || this.attachment.transientState?.loading
79
- || !this.attachment.url);
80
- }
81
- get isImageAttachment() {
82
- return this.attachment?.type?.startsWith('image/');
83
- }
84
- get hasFrame() {
85
- if (!this.attachment)
86
- return false;
87
- return this.attachment.type === 'iframe' || (this.attachment.type === 'card'
88
- && this.attachment.card?.player);
89
- }
90
- get frameUrl() {
91
- if (!this.attachment)
92
- return undefined;
93
- if (this.attachment.type === 'iframe') {
94
- return this.attachment.url;
95
- }
96
- else if (this.attachment.type === 'card') {
97
- return this.attachment.card.player;
98
- }
99
- }
100
- }
101
- BantaAttachmentComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: BantaAttachmentComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
102
- BantaAttachmentComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: BantaAttachmentComponent, selector: "banta-attachment", inputs: { attachment: "attachment", loading: "loading", editing: "editing", loadingMessage: "loadingMessage", error: "error", errorMessage: "errorMessage" }, outputs: { removed: "removed", activated: "activated", loaded: "loaded" }, host: { properties: { "class.loading": "this.isLoading" } }, ngImport: i0, template: "<button type=\"button\" (click)=\"remove()\" mat-mini-fab color=\"primary\" class=\"remove-button\" *ngIf=\"editing\">\r\n <mat-icon>close</mat-icon>\r\n</button>\r\n\r\n<ng-container *ngIf=\"isError\">\r\n <mat-icon class=\"error\">close</mat-icon>\r\n <em class=\"error\">{{theErrorMessage}}</em>\r\n</ng-container>\r\n<ng-container *ngIf=\"!isError\">\r\n <ng-container *ngIf=\"isLoading\">\r\n <mat-spinner></mat-spinner>\r\n <em>{{loadingMessage}}</em>\r\n </ng-container>\r\n <ng-container *ngIf=\"!isLoading && attachment\">\r\n <iframe *ngIf=\"hasFrame\"\r\n sandbox=\"allow-scripts allow-popups allow-same-origin allow-presentation\" \r\n [src]=\"frameUrl | trustResourceUrl\"></iframe>\r\n <a *ngIf=\"attachment.type === 'card'\" class=\"card-attachment\" [href]=\"attachment.url\" target=\"_blank\" [class.has-image]=\"attachment.card.image\">\r\n <img \r\n *ngIf=\"attachment.card.image\"\r\n class=\"thumbnail\" \r\n [src]=\"attachment.card.image\"\r\n />\r\n <div class=\"description\">\r\n <h1>{{attachment.card.title}}</h1>\r\n <div class=\"summary\">\r\n {{attachment.card.description}}\r\n </div>\r\n <cite>{{attachment.card.url}}</cite>\r\n </div>\r\n </a>\r\n <a class=\"image-attachment\" *ngIf=\"isImageAttachment && attachment.url\" href=\"javascript:;\" (click)=\"activate()\">\r\n <img [src]=\"attachment.url\" alt=\"Image Attachment\">\r\n </a>\r\n <blockquote *ngIf=\"attachment.type === 'tweet'\" \r\n class=\"twitter-tweet\">\r\n <p lang=\"en\" dir=\"ltr\"></p>\r\n <a [href]=\"attachment.url\"></a>\r\n </blockquote>\r\n </ng-container>\r\n</ng-container>", styles: [":host{position:relative;display:block}:host.loading{outline:1px solid #333;padding:1em 0;width:300px;text-align:center}:host.loading mat-spinner{display:block;margin:0 auto .5em;width:-moz-fit-content;width:fit-content}a.card-attachment{display:flex;align-items:flex-start;gap:1em;width:100%;border:1px solid #666;border-radius:4px;padding:1em;box-sizing:border-box;background-color:#191919;margin:1em 0}a.card-attachment img{width:250px;aspect-ratio:16/9;-o-object-fit:cover;object-fit:cover;border-radius:10px}a.card-attachment.has-image h1{font-size:22px}a.card-attachment h1{min-width:0;margin:0 0 .5em;font-size:26px}a.card-attachment cite{min-width:0;opacity:.75;margin-top:1em;display:block;font-size:80%;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}a.card-attachment .description{min-width:0;width:100%}a.card-attachment .summary{overflow-x:hidden;text-overflow:ellipsis}.remove-button{position:absolute;right:10px;top:10px;margin:0;z-index:1}a.image-attachment{width:300px;position:relative;text-align:center}a.image-attachment.with-border{outline:1px solid #333;padding:1em 0}a.image-attachment mat-spinner{display:block;margin:0 auto .5em;width:-moz-fit-content;width:fit-content}a.image-attachment mat-icon.error{display:block;font-size:48px;width:48px;height:48px;margin:0 auto .5em}a.image-attachment .error{color:#b76363}a.image-attachment img{width:300px;border-radius:10px;max-width:100%;max-height:20em;-o-object-fit:cover;object-fit:cover}iframe{border:none;width:100%;aspect-ratio:16/9}@media (max-width: 700px){a.card-attachment{flex-direction:column}a.card-attachment img{width:100%}}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i3.Dir, selector: "[dir]", inputs: ["dir"], outputs: ["dirChange"], exportAs: ["dir"] }, { kind: "component", type: i4.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "diameter", "strokeWidth", "mode", "value"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: i5.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "pipe", type: i6.BantaTrustResourceUrlPipe, name: "trustResourceUrl" }] });
103
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: BantaAttachmentComponent, decorators: [{
104
- type: Component,
105
- args: [{ selector: 'banta-attachment', template: "<button type=\"button\" (click)=\"remove()\" mat-mini-fab color=\"primary\" class=\"remove-button\" *ngIf=\"editing\">\r\n <mat-icon>close</mat-icon>\r\n</button>\r\n\r\n<ng-container *ngIf=\"isError\">\r\n <mat-icon class=\"error\">close</mat-icon>\r\n <em class=\"error\">{{theErrorMessage}}</em>\r\n</ng-container>\r\n<ng-container *ngIf=\"!isError\">\r\n <ng-container *ngIf=\"isLoading\">\r\n <mat-spinner></mat-spinner>\r\n <em>{{loadingMessage}}</em>\r\n </ng-container>\r\n <ng-container *ngIf=\"!isLoading && attachment\">\r\n <iframe *ngIf=\"hasFrame\"\r\n sandbox=\"allow-scripts allow-popups allow-same-origin allow-presentation\" \r\n [src]=\"frameUrl | trustResourceUrl\"></iframe>\r\n <a *ngIf=\"attachment.type === 'card'\" class=\"card-attachment\" [href]=\"attachment.url\" target=\"_blank\" [class.has-image]=\"attachment.card.image\">\r\n <img \r\n *ngIf=\"attachment.card.image\"\r\n class=\"thumbnail\" \r\n [src]=\"attachment.card.image\"\r\n />\r\n <div class=\"description\">\r\n <h1>{{attachment.card.title}}</h1>\r\n <div class=\"summary\">\r\n {{attachment.card.description}}\r\n </div>\r\n <cite>{{attachment.card.url}}</cite>\r\n </div>\r\n </a>\r\n <a class=\"image-attachment\" *ngIf=\"isImageAttachment && attachment.url\" href=\"javascript:;\" (click)=\"activate()\">\r\n <img [src]=\"attachment.url\" alt=\"Image Attachment\">\r\n </a>\r\n <blockquote *ngIf=\"attachment.type === 'tweet'\" \r\n class=\"twitter-tweet\">\r\n <p lang=\"en\" dir=\"ltr\"></p>\r\n <a [href]=\"attachment.url\"></a>\r\n </blockquote>\r\n </ng-container>\r\n</ng-container>", styles: [":host{position:relative;display:block}:host.loading{outline:1px solid #333;padding:1em 0;width:300px;text-align:center}:host.loading mat-spinner{display:block;margin:0 auto .5em;width:-moz-fit-content;width:fit-content}a.card-attachment{display:flex;align-items:flex-start;gap:1em;width:100%;border:1px solid #666;border-radius:4px;padding:1em;box-sizing:border-box;background-color:#191919;margin:1em 0}a.card-attachment img{width:250px;aspect-ratio:16/9;-o-object-fit:cover;object-fit:cover;border-radius:10px}a.card-attachment.has-image h1{font-size:22px}a.card-attachment h1{min-width:0;margin:0 0 .5em;font-size:26px}a.card-attachment cite{min-width:0;opacity:.75;margin-top:1em;display:block;font-size:80%;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}a.card-attachment .description{min-width:0;width:100%}a.card-attachment .summary{overflow-x:hidden;text-overflow:ellipsis}.remove-button{position:absolute;right:10px;top:10px;margin:0;z-index:1}a.image-attachment{width:300px;position:relative;text-align:center}a.image-attachment.with-border{outline:1px solid #333;padding:1em 0}a.image-attachment mat-spinner{display:block;margin:0 auto .5em;width:-moz-fit-content;width:fit-content}a.image-attachment mat-icon.error{display:block;font-size:48px;width:48px;height:48px;margin:0 auto .5em}a.image-attachment .error{color:#b76363}a.image-attachment img{width:300px;border-radius:10px;max-width:100%;max-height:20em;-o-object-fit:cover;object-fit:cover}iframe{border:none;width:100%;aspect-ratio:16/9}@media (max-width: 700px){a.card-attachment{flex-direction:column}a.card-attachment img{width:100%}}\n"] }]
106
- }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { attachment: [{
107
- type: Input
108
- }], loading: [{
109
- type: Input
110
- }], editing: [{
111
- type: Input
112
- }], loadingMessage: [{
113
- type: Input
114
- }], error: [{
115
- type: Input
116
- }], errorMessage: [{
117
- type: Input
118
- }], removed: [{
119
- type: Output
120
- }], activated: [{
121
- type: Output
122
- }], loaded: [{
123
- type: Output
124
- }], isLoading: [{
125
- type: HostBinding,
126
- args: ['class.loading']
127
- }] } });
128
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0YWNobWVudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZGsvc3JjL2xpYi9jb21tb24vYXR0YWNobWVudC9hdHRhY2htZW50LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Nkay9zcmMvbGliL2NvbW1vbi9hdHRhY2htZW50L2F0dGFjaG1lbnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxXQUFXLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVsRixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7OztBQUUvQixJQUFJLGNBQWMsR0FBRyxLQUFLLENBQUM7QUFPM0IsTUFBTSxPQUFPLHdCQUF3QjtJQUNqQyxZQUNZLFVBQW1DO1FBQW5DLGVBQVUsR0FBVixVQUFVLENBQXlCO1FBYXRDLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFDaEIsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUNoQixtQkFBYyxHQUFXLGdCQUFnQixDQUFDO1FBQzFDLFVBQUssR0FBRyxLQUFLLENBQUM7UUFDZCxpQkFBWSxHQUFXLHVCQUF1QixDQUFDO1FBQzlDLFlBQU8sR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBQzlCLGNBQVMsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBQ2hDLFdBQU0sR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBRS9CLGdCQUFXLEdBQUcsS0FBSyxDQUFDO0lBbkI1QixDQUFDO0lBR0QsSUFBYSxVQUFVLEtBQUssT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUN0RCxJQUFJLFVBQVUsQ0FBQyxLQUFLO1FBQ2hCLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxTQUFT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UTtRQUNSLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVTtZQUNoQixPQUFPLEtBQUssQ0FBQztRQUVqQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxLQUFLLFFBQVEsSUFBSSxDQUN4QyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksS0FBSyxNQUFNO2VBQzVCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FDbEMsQ0FBQztJQUNOLENBQUM7SUFFRCxJQUFJLFFBQVE7UUFDUixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVU7WUFDaEIsT0FBTyxTQUFTLENBQUM7UUFFckIsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUU7WUFDbkMsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQztTQUM5QjthQUFNLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFO1lBQ3hDLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1NBQ3RDO0lBQ0wsQ0FBQzs7c0hBakhRLHdCQUF3QjswR0FBeEIsd0JBQXdCLDhWQ1hyQyw2M0RBd0NlOzRGRDdCRix3QkFBd0I7a0JBTHBDLFNBQVM7K0JBQ0ksa0JBQWtCO2lHQVlmLFVBQVU7c0JBQXRCLEtBQUs7Z0JBT0csT0FBTztzQkFBZixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNJLE9BQU87c0JBQWhCLE1BQU07Z0JBQ0csU0FBUztzQkFBbEIsTUFBTTtnQkFDRyxNQUFNO3NCQUFmLE1BQU07Z0JBNkRILFNBQVM7c0JBRFosV0FBVzt1QkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBIb3N0QmluZGluZywgSW5wdXQsIE91dHB1dCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IENoYXRNZXNzYWdlQXR0YWNobWVudCB9IGZyb20gXCJAYmFudGEvY29tbW9uXCI7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tIFwicnhqc1wiO1xyXG5cclxubGV0IFRXSVRURVJfTE9BREVEID0gZmFsc2U7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnYmFudGEtYXR0YWNobWVudCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vYXR0YWNobWVudC5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9hdHRhY2htZW50LmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIEJhbnRhQXR0YWNobWVudENvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+XHJcbiAgICApIHtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfYXR0YWNobWVudDogQ2hhdE1lc3NhZ2VBdHRhY2htZW50O1xyXG4gICAgQElucHV0KCkgZ2V0IGF0dGFjaG1lbnQoKSB7IHJldHVybiB0aGlzLl9hdHRhY2htZW50OyB9XHJcbiAgICBzZXQgYXR0YWNobWVudCh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuX2F0dGFjaG1lbnQgPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLmNoZWNrTG9hZCgpO1xyXG4gICAgICAgIHRoaXMubG9hZFBsYXRmb3JtU3BlY2lmaWMoKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgQElucHV0KCkgbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgQElucHV0KCkgZWRpdGluZyA9IGZhbHNlO1xyXG4gICAgQElucHV0KCkgbG9hZGluZ01lc3NhZ2U6IHN0cmluZyA9ICdQbGVhc2Ugd2FpdC4uLic7XHJcbiAgICBASW5wdXQoKSBlcnJvciA9IGZhbHNlO1xyXG4gICAgQElucHV0KCkgZXJyb3JNZXNzYWdlOiBzdHJpbmcgPSAnQW4gZXJyb3IgaGFzIG9jY3VycmVkJztcclxuICAgIEBPdXRwdXQoKSByZW1vdmVkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICAgIEBPdXRwdXQoKSBhY3RpdmF0ZWQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gICAgQE91dHB1dCgpIGxvYWRlZCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gICAgcHJpdmF0ZSBfdmlld0xvYWRlZCA9IGZhbHNlO1xyXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgICAgIHRoaXMuX3ZpZXdMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuY2hlY2tMb2FkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkVHdpdHRlcldpZGdldHMoKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKVxyXG4gICAgICAgICAgICB3aW5kb3dbJ3R3dHRyJ10/LndpZGdldHMubG9hZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZFBsYXRmb3JtU3BlY2lmaWMoKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKHRoaXMuX2F0dGFjaG1lbnQ/LnR5cGUgPT09ICd0d2VldCcpIHtcclxuICAgICAgICAgICAgaWYgKCFUV0lUVEVSX0xPQURFRCAmJiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdzY3JpcHRbc3JjPVwiaHR0cHM6Ly9wbGF0Zm9ybS50d2l0dGVyLmNvbS93aWRnZXRzLmpzXCJdJykpXHJcbiAgICAgICAgICAgICAgICBUV0lUVEVSX0xPQURFRCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgIVRXSVRURVJfTE9BREVEKSB7XHJcbiAgICAgICAgICAgICAgICBUV0lUVEVSX0xPQURFRCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBsZXQgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XHJcbiAgICAgICAgICAgICAgICBzY3JpcHQuc3JjID0gJ2h0dHBzOi8vcGxhdGZvcm0udHdpdHRlci5jb20vd2lkZ2V0cy5qcyc7XHJcbiAgICAgICAgICAgICAgICBzY3JpcHQuYXN5bmMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgc2NyaXB0LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCAoKSA9PiBzZXRUaW1lb3V0KCgpID0+IHRoaXMubG9hZFR3aXR0ZXJXaWRnZXRzKCkpKTtcclxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5sb2FkVHdpdHRlcldpZGdldHMoKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjaGVja0xvYWQoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9hdHRhY2htZW50IHx8ICF0aGlzLl92aWV3TG9hZGVkIHx8ICF0aGlzLmVsZW1lbnRSZWY/Lm5hdGl2ZUVsZW1lbnQpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKVxyXG4gICAgICAgICAgICB0aGlzLmxvYWRlZC5uZXh0KCk7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMubG9hZGVkLm5leHQoKSwgMjUwKTtcclxuICAgIH1cclxuXHJcbiAgICBhY3RpdmF0ZSgpIHtcclxuICAgICAgICB0aGlzLmFjdGl2YXRlZC5uZXh0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlKCkge1xyXG4gICAgICAgIHRoaXMucmVtb3ZlZC5uZXh0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGlzRXJyb3IoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3IgfHwgdGhpcy5hdHRhY2htZW50Py50cmFuc2llbnRTdGF0ZT8uZXJyb3I7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHRoZUVycm9yTWVzc2FnZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5lcnJvck1lc3NhZ2UgfHwgdGhpcy5hdHRhY2htZW50Py50cmFuc2llbnRTdGF0ZT8uZXJyb3JNZXNzYWdlO1xyXG4gICAgfVxyXG5cclxuICAgIEBIb3N0QmluZGluZygnY2xhc3MubG9hZGluZycpXHJcbiAgICBnZXQgaXNMb2FkaW5nKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRpbmcgJiYgKFxyXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgfHwgIXRoaXMuYXR0YWNobWVudCB8fCB0aGlzLmF0dGFjaG1lbnQudHJhbnNpZW50U3RhdGU/LmxvYWRpbmcgXHJcbiAgICAgICAgICAgIHx8ICF0aGlzLmF0dGFjaG1lbnQudXJsXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgaXNJbWFnZUF0dGFjaG1lbnQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYXR0YWNobWVudD8udHlwZT8uc3RhcnRzV2l0aCgnaW1hZ2UvJyk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGhhc0ZyYW1lKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5hdHRhY2htZW50KVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmF0dGFjaG1lbnQudHlwZSA9PT0gJ2lmcmFtZScgfHwgKFxyXG4gICAgICAgICAgICB0aGlzLmF0dGFjaG1lbnQudHlwZSA9PT0gJ2NhcmQnIFxyXG4gICAgICAgICAgICAmJiB0aGlzLmF0dGFjaG1lbnQuY2FyZD8ucGxheWVyXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgZnJhbWVVcmwoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmF0dGFjaG1lbnQpXHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKHRoaXMuYXR0YWNobWVudC50eXBlID09PSAnaWZyYW1lJykge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hdHRhY2htZW50LnVybDtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuYXR0YWNobWVudC50eXBlID09PSAnY2FyZCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXR0YWNobWVudC5jYXJkLnBsYXllcjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0iLCI8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwicmVtb3ZlKClcIiBtYXQtbWluaS1mYWIgY29sb3I9XCJwcmltYXJ5XCIgY2xhc3M9XCJyZW1vdmUtYnV0dG9uXCIgKm5nSWY9XCJlZGl0aW5nXCI+XHJcbiAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxyXG48L2J1dHRvbj5cclxuXHJcbjxuZy1jb250YWluZXIgKm5nSWY9XCJpc0Vycm9yXCI+XHJcbiAgICA8bWF0LWljb24gY2xhc3M9XCJlcnJvclwiPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgIDxlbSBjbGFzcz1cImVycm9yXCI+e3t0aGVFcnJvck1lc3NhZ2V9fTwvZW0+XHJcbjwvbmctY29udGFpbmVyPlxyXG48bmctY29udGFpbmVyICpuZ0lmPVwiIWlzRXJyb3JcIj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0xvYWRpbmdcIj5cclxuICAgICAgICA8bWF0LXNwaW5uZXI+PC9tYXQtc3Bpbm5lcj5cclxuICAgICAgICA8ZW0+e3tsb2FkaW5nTWVzc2FnZX19PC9lbT5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0xvYWRpbmcgJiYgYXR0YWNobWVudFwiPlxyXG4gICAgICAgIDxpZnJhbWUgKm5nSWY9XCJoYXNGcmFtZVwiXHJcbiAgICAgICAgICAgIHNhbmRib3g9XCJhbGxvdy1zY3JpcHRzIGFsbG93LXBvcHVwcyBhbGxvdy1zYW1lLW9yaWdpbiBhbGxvdy1wcmVzZW50YXRpb25cIiBcclxuICAgICAgICAgICAgW3NyY109XCJmcmFtZVVybCB8IHRydXN0UmVzb3VyY2VVcmxcIj48L2lmcmFtZT5cclxuICAgICAgICA8YSAqbmdJZj1cImF0dGFjaG1lbnQudHlwZSA9PT0gJ2NhcmQnXCIgY2xhc3M9XCJjYXJkLWF0dGFjaG1lbnRcIiBbaHJlZl09XCJhdHRhY2htZW50LnVybFwiIHRhcmdldD1cIl9ibGFua1wiIFtjbGFzcy5oYXMtaW1hZ2VdPVwiYXR0YWNobWVudC5jYXJkLmltYWdlXCI+XHJcbiAgICAgICAgICAgIDxpbWcgXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImF0dGFjaG1lbnQuY2FyZC5pbWFnZVwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInRodW1ibmFpbFwiIFxyXG4gICAgICAgICAgICAgICAgW3NyY109XCJhdHRhY2htZW50LmNhcmQuaW1hZ2VcIlxyXG4gICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRlc2NyaXB0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICA8aDE+e3thdHRhY2htZW50LmNhcmQudGl0bGV9fTwvaDE+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3VtbWFyeVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7YXR0YWNobWVudC5jYXJkLmRlc2NyaXB0aW9ufX1cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGNpdGU+e3thdHRhY2htZW50LmNhcmQudXJsfX08L2NpdGU+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvYT5cclxuICAgICAgICA8YSBjbGFzcz1cImltYWdlLWF0dGFjaG1lbnRcIiAqbmdJZj1cImlzSW1hZ2VBdHRhY2htZW50ICYmIGF0dGFjaG1lbnQudXJsXCIgaHJlZj1cImphdmFzY3JpcHQ6O1wiIChjbGljayk9XCJhY3RpdmF0ZSgpXCI+XHJcbiAgICAgICAgICAgIDxpbWcgW3NyY109XCJhdHRhY2htZW50LnVybFwiIGFsdD1cIkltYWdlIEF0dGFjaG1lbnRcIj5cclxuICAgICAgICA8L2E+XHJcbiAgICAgICAgPGJsb2NrcXVvdGUgKm5nSWY9XCJhdHRhY2htZW50LnR5cGUgPT09ICd0d2VldCdcIiBcclxuICAgICAgICAgICAgY2xhc3M9XCJ0d2l0dGVyLXR3ZWV0XCI+XHJcbiAgICAgICAgICAgICAgICA8cCBsYW5nPVwiZW5cIiBkaXI9XCJsdHJcIj48L3A+XHJcbiAgICAgICAgICAgICAgICA8YSBbaHJlZl09XCJhdHRhY2htZW50LnVybFwiPjwvYT5cclxuICAgICAgICA8L2Jsb2NrcXVvdGU+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuPC9uZy1jb250YWluZXI+Il19
@@ -1,31 +0,0 @@
1
- import { Component, ViewChild } from "@angular/core";
2
- import * as i0 from "@angular/core";
3
- import * as i1 from "@angular/material/icon";
4
- export class LightboxComponent {
5
- ngAfterViewInit() {
6
- if (typeof window !== 'undefined') {
7
- document.body.appendChild(this.containerElement.nativeElement);
8
- }
9
- }
10
- ngOnDestroy() {
11
- this.containerElement.nativeElement.remove();
12
- }
13
- close() {
14
- this.isOpen = false;
15
- }
16
- open(currentImage, images) {
17
- this.currentImage = currentImage;
18
- this.images = images;
19
- this.isOpen = true;
20
- }
21
- }
22
- LightboxComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: LightboxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
23
- LightboxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: LightboxComponent, selector: "banta-lightbox", viewQueries: [{ propertyName: "containerElement", first: true, predicate: ["container"], descendants: true }], ngImport: i0, template: "<div \r\n class=\"banta-lightbox-container\" \r\n #container\r\n [class.open]=\"isOpen\"\r\n >\r\n\r\n <a class=\"underlay\" (click)=\"close()\" href=\"javascript:;\"></a>\r\n\r\n <a class=\"close-button\" href=\"javascript:;\" (click)=\"close()\">\r\n <mat-icon>close</mat-icon>\r\n </a>\r\n\r\n <img [src]=\"currentImage\" />\r\n</div>\r\n", styles: ["::ng-deep .banta-lightbox-container{position:fixed;inset:0;opacity:0;pointer-events:none;background-color:#000000bf;color:#fff;z-index:10000;transition:.25s opacity ease-in-out;display:flex;align-items:center;justify-content:center}::ng-deep .banta-lightbox-container a.underlay{z-index:0;position:absolute;inset:0;opacity:0}::ng-deep .banta-lightbox-container img{z-index:10;max-width:95%}::ng-deep .banta-lightbox-container.open{opacity:1;pointer-events:initial}::ng-deep .banta-lightbox-container a.close-button{position:absolute;top:0;right:0;padding:.75em;z-index:20}\n"], dependencies: [{ kind: "component", type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] });
24
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: LightboxComponent, decorators: [{
25
- type: Component,
26
- args: [{ selector: 'banta-lightbox', template: "<div \r\n class=\"banta-lightbox-container\" \r\n #container\r\n [class.open]=\"isOpen\"\r\n >\r\n\r\n <a class=\"underlay\" (click)=\"close()\" href=\"javascript:;\"></a>\r\n\r\n <a class=\"close-button\" href=\"javascript:;\" (click)=\"close()\">\r\n <mat-icon>close</mat-icon>\r\n </a>\r\n\r\n <img [src]=\"currentImage\" />\r\n</div>\r\n", styles: ["::ng-deep .banta-lightbox-container{position:fixed;inset:0;opacity:0;pointer-events:none;background-color:#000000bf;color:#fff;z-index:10000;transition:.25s opacity ease-in-out;display:flex;align-items:center;justify-content:center}::ng-deep .banta-lightbox-container a.underlay{z-index:0;position:absolute;inset:0;opacity:0}::ng-deep .banta-lightbox-container img{z-index:10;max-width:95%}::ng-deep .banta-lightbox-container.open{opacity:1;pointer-events:initial}::ng-deep .banta-lightbox-container a.close-button{position:absolute;top:0;right:0;padding:.75em;z-index:20}\n"] }]
27
- }], propDecorators: { containerElement: [{
28
- type: ViewChild,
29
- args: ['container']
30
- }] } });
31
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlnaHRib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2RrL3NyYy9saWIvY29tbW9uL2xpZ2h0Ym94L2xpZ2h0Ym94LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Nkay9zcmMvbGliL2NvbW1vbi9saWdodGJveC9saWdodGJveC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7O0FBT2pFLE1BQU0sT0FBTyxpQkFBaUI7SUFJMUIsZUFBZTtRQUNYLElBQUksT0FBTyxNQUFNLEtBQUssV0FBVyxFQUFFO1lBQy9CLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztTQUNsRTtJQUNMLENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNqRCxDQUFDO0lBT0QsS0FBSztRQUNELElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxJQUFJLENBQUMsWUFBb0IsRUFBRSxNQUFnQjtRQUN2QyxJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztRQUNqQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUN2QixDQUFDOzsrR0EzQlEsaUJBQWlCO21HQUFqQixpQkFBaUIscUtDUDlCLHNYQWNBOzRGRFBhLGlCQUFpQjtrQkFMN0IsU0FBUzsrQkFDSSxnQkFBZ0I7OEJBTTFCLGdCQUFnQjtzQkFEZixTQUFTO3VCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIFZpZXdDaGlsZCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnYmFudGEtbGlnaHRib3gnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2xpZ2h0Ym94LmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2xpZ2h0Ym94LmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIExpZ2h0Ym94Q29tcG9uZW50IHtcclxuICAgIEBWaWV3Q2hpbGQoJ2NvbnRhaW5lcicpIFxyXG4gICAgY29udGFpbmVyRWxlbWVudDogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XHJcblxyXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuY29udGFpbmVyRWxlbWVudC5uYXRpdmVFbGVtZW50KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICAgICAgdGhpcy5jb250YWluZXJFbGVtZW50Lm5hdGl2ZUVsZW1lbnQucmVtb3ZlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaW1hZ2VzOiBzdHJpbmdbXTtcclxuICAgIGN1cnJlbnRJbWFnZTogc3RyaW5nO1xyXG5cclxuICAgIGlzT3BlbjogYm9vbGVhbjtcclxuXHJcbiAgICBjbG9zZSgpIHtcclxuICAgICAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIG9wZW4oY3VycmVudEltYWdlOiBzdHJpbmcsIGltYWdlczogc3RyaW5nW10pIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRJbWFnZSA9IGN1cnJlbnRJbWFnZTtcclxuICAgICAgICB0aGlzLmltYWdlcyA9IGltYWdlcztcclxuICAgICAgICB0aGlzLmlzT3BlbiA9IHRydWU7XHJcbiAgICB9XHJcbn0iLCI8ZGl2IFxyXG4gICAgY2xhc3M9XCJiYW50YS1saWdodGJveC1jb250YWluZXJcIiBcclxuICAgICNjb250YWluZXJcclxuICAgIFtjbGFzcy5vcGVuXT1cImlzT3BlblwiXHJcbiAgICA+XHJcblxyXG4gICAgPGEgY2xhc3M9XCJ1bmRlcmxheVwiIChjbGljayk9XCJjbG9zZSgpXCIgaHJlZj1cImphdmFzY3JpcHQ6O1wiPjwvYT5cclxuXHJcbiAgICA8YSBjbGFzcz1cImNsb3NlLWJ1dHRvblwiIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiAoY2xpY2spPVwiY2xvc2UoKVwiPlxyXG4gICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICA8L2E+XHJcblxyXG4gICAgPGltZyBbc3JjXT1cImN1cnJlbnRJbWFnZVwiIC8+XHJcbjwvZGl2PlxyXG4iXX0=
@@ -1,88 +0,0 @@
1
- import { Pipe, Inject, Optional } from '@angular/core';
2
- import * as marked from 'marked';
3
- import createDOMPurify from 'dompurify';
4
- import twemoji from 'twemoji';
5
- import { BANTA_SDK_OPTIONS } from '../sdk-options';
6
- import * as i0 from "@angular/core";
7
- import * as i1 from "@angular/platform-browser";
8
- const underline = {
9
- name: 'underline',
10
- level: 'inline',
11
- start(src) { return src.match(/\+\+/)?.index; },
12
- tokenizer(src, tokens) {
13
- const rule = /^\+\+(.*?)\+\+/; // Regex for the complete token
14
- const match = rule.exec(src);
15
- if (match) {
16
- return {
17
- type: 'underline',
18
- raw: match[0],
19
- text: this.lexer.inlineTokens(match[1].trim()), // Additional custom properties
20
- };
21
- }
22
- },
23
- renderer(token) {
24
- return `<u>${this.parser.parseInline(token.text)}</u>`;
25
- }
26
- };
27
- marked.marked.use({
28
- extensions: [underline]
29
- });
30
- export class BantaMarkdownToHtmlPipe {
31
- constructor(sanitizer, sdkOptions) {
32
- this.sanitizer = sanitizer;
33
- this.sdkOptions = sdkOptions;
34
- this.renderer = new marked.Renderer();
35
- const linkRenderer = this.renderer.link;
36
- this.renderer.link = token => {
37
- const html = linkRenderer.call(this.renderer, token);
38
- return html.replace(/^<a /, '<a target="_blank" rel="noopener noreferrer nofollow" ');
39
- };
40
- }
41
- get emojiUrl() {
42
- return this.sdkOptions?.emojiUrl ?? 'https://cdn.jsdelivr.net/gh/twitter/twemoji@14.0.2/assets/';
43
- }
44
- transform(value) {
45
- if (!value)
46
- return '';
47
- let purifier = createDOMPurify(window);
48
- // https://github.com/cure53/DOMPurify/blob/e1c19cf6407d782b666cb1d02a6af191f9cbc09e/demos/hooks-target-blank-demo.html
49
- // Add a hook to make all links open a new window
50
- purifier.addHook('afterSanitizeAttributes', function (node) {
51
- // set all elements owning target to target=_blank
52
- if ('target' in node) {
53
- node.setAttribute('target', '_blank');
54
- // prevent https://www.owasp.org/index.php/Reverse_Tabnabbing
55
- node.setAttribute('rel', 'noopener noreferrer nofollow');
56
- }
57
- // set non-HTML/MathML links to xlink:show=new
58
- if (!node.hasAttribute('target')
59
- && (node.hasAttribute('xlink:href')
60
- || node.hasAttribute('href'))) {
61
- node.setAttribute('xlink:show', 'new');
62
- }
63
- });
64
- value = marked.marked.parse(value, {
65
- renderer: this.renderer
66
- });
67
- value = twemoji.parse(value, { base: this.emojiUrl });
68
- return this.sanitizer.bypassSecurityTrustHtml(purifier.sanitize(value, {
69
- FORBID_TAGS: ['h1', 'h2', 'h3', 'h4', 'style', 'link', 'script'],
70
- FORBID_ATTR: ['style'],
71
- KEEP_CONTENT: true
72
- }));
73
- }
74
- }
75
- BantaMarkdownToHtmlPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: BantaMarkdownToHtmlPipe, deps: [{ token: i1.DomSanitizer }, { token: BANTA_SDK_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Pipe });
76
- BantaMarkdownToHtmlPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "14.2.12", ngImport: i0, type: BantaMarkdownToHtmlPipe, name: "bantaMarkdownToHtml" });
77
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: BantaMarkdownToHtmlPipe, decorators: [{
78
- type: Pipe,
79
- args: [{
80
- name: 'bantaMarkdownToHtml'
81
- }]
82
- }], ctorParameters: function () { return [{ type: i1.DomSanitizer }, { type: undefined, decorators: [{
83
- type: Inject,
84
- args: [BANTA_SDK_OPTIONS]
85
- }, {
86
- type: Optional
87
- }] }]; } });
88
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFya2Rvd24tdG8taHRtbC5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2RrL3NyYy9saWIvY29tbW9uL21hcmtkb3duLXRvLWh0bWwucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFpQixNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RFLE9BQU8sS0FBSyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQ2pDLE9BQU8sZUFBZSxNQUFNLFdBQVcsQ0FBQztBQUV4QyxPQUFPLE9BQU8sTUFBTSxTQUFTLENBQUM7QUFDOUIsT0FBTyxFQUFFLGlCQUFpQixFQUFjLE1BQU0sZ0JBQWdCLENBQUM7OztBQUUvRCxNQUFNLFNBQVMsR0FBRztJQUNkLElBQUksRUFBRSxXQUFXO0lBQ2pCLEtBQUssRUFBRSxRQUFRO0lBQ2YsS0FBSyxDQUFDLEdBQUcsSUFBSSxPQUFPLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUMvQyxTQUFTLENBQUMsR0FBRyxFQUFFLE1BQU07UUFDakIsTUFBTSxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQywrQkFBK0I7UUFDOUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM3QixJQUFJLEtBQUssRUFBRTtZQUNQLE9BQU87Z0JBQ0gsSUFBSSxFQUFFLFdBQVc7Z0JBQ2pCLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUNiLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSwrQkFBK0I7YUFDbEYsQ0FBQztTQUNMO0lBQ0wsQ0FBQztJQUNELFFBQVEsQ0FBQyxLQUFLO1FBQ1YsT0FBTyxNQUFN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QyxpQkFBaUI7OzBCQUFHLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtLCBJbmplY3QsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCAqIGFzIG1hcmtlZCBmcm9tICdtYXJrZWQnO1xyXG5pbXBvcnQgY3JlYXRlRE9NUHVyaWZ5IGZyb20gJ2RvbXB1cmlmeSc7XHJcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xyXG5pbXBvcnQgdHdlbW9qaSBmcm9tICd0d2Vtb2ppJztcclxuaW1wb3J0IHsgQkFOVEFfU0RLX09QVElPTlMsIFNka09wdGlvbnMgfSBmcm9tICcuLi9zZGstb3B0aW9ucyc7XHJcblxyXG5jb25zdCB1bmRlcmxpbmUgPSB7XHJcbiAgICBuYW1lOiAndW5kZXJsaW5lJyxcclxuICAgIGxldmVsOiAnaW5saW5lJywgLy8gSXMgdGhpcyBhIGJsb2NrLWxldmVsIG9yIGlubGluZS1sZXZlbCB0b2tlbml6ZXI/XHJcbiAgICBzdGFydChzcmMpIHsgcmV0dXJuIHNyYy5tYXRjaCgvXFwrXFwrLyk/LmluZGV4OyB9LCAvLyBIaW50IHRvIE1hcmtlZC5qcyB0byBzdG9wIGFuZCBjaGVjayBmb3IgYSBtYXRjaFxyXG4gICAgdG9rZW5pemVyKHNyYywgdG9rZW5zKSB7XHJcbiAgICAgICAgY29uc3QgcnVsZSA9IC9eXFwrXFwrKC4qPylcXCtcXCsvOyAvLyBSZWdleCBmb3IgdGhlIGNvbXBsZXRlIHRva2VuXHJcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBydWxlLmV4ZWMoc3JjKTtcclxuICAgICAgICBpZiAobWF0Y2gpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHsgLy8gVG9rZW4gdG8gZ2VuZXJhdGVcclxuICAgICAgICAgICAgICAgIHR5cGU6ICd1bmRlcmxpbmUnLCAvLyBTaG91bGQgbWF0Y2ggXCJuYW1lXCIgYWJvdmVcclxuICAgICAgICAgICAgICAgIHJhdzogbWF0Y2hbMF0sIC8vIFRleHQgdG8gY29uc3VtZSBmcm9tIHRoZSBzb3VyY2VcclxuICAgICAgICAgICAgICAgIHRleHQ6IHRoaXMubGV4ZXIuaW5saW5lVG9rZW5zKG1hdGNoWzFdLnRyaW0oKSksIC8vIEFkZGl0aW9uYWwgY3VzdG9tIHByb3BlcnRpZXNcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgcmVuZGVyZXIodG9rZW4pIHtcclxuICAgICAgICByZXR1cm4gYDx1PiR7dGhpcy5wYXJzZXIucGFyc2VJbmxpbmUodG9rZW4udGV4dCl9PC91PmA7XHJcbiAgICB9XHJcbn07XHJcblxyXG5tYXJrZWQubWFya2VkLnVzZSh7XHJcbiAgICBleHRlbnNpb25zOiBbdW5kZXJsaW5lXVxyXG59KTtcclxuXHJcbkBQaXBlKHtcclxuICAgIG5hbWU6ICdiYW50YU1hcmtkb3duVG9IdG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQmFudGFNYXJrZG93blRvSHRtbFBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXHJcblxyXG4gICAgICAgIEBJbmplY3QoQkFOVEFfU0RLX09QVElPTlMpIEBPcHRpb25hbCgpXHJcbiAgICAgICAgcHJpdmF0ZSBzZGtPcHRpb25zOiBTZGtPcHRpb25zXHJcbiAgICApIHtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyID0gbmV3IG1hcmtlZC5SZW5kZXJlcigpO1xyXG4gICAgICAgIGNvbnN0IGxpbmtSZW5kZXJlciA9IHRoaXMucmVuZGVyZXIubGluaztcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLmxpbmsgPSB0b2tlbiA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGh0bWwgPSBsaW5rUmVuZGVyZXIuY2FsbCh0aGlzLnJlbmRlcmVyLCB0b2tlbik7XHJcbiAgICAgICAgICAgIHJldHVybiBodG1sLnJlcGxhY2UoL148YSAvLCAnPGEgdGFyZ2V0PVwiX2JsYW5rXCIgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlciBub2ZvbGxvd1wiICcpO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG5cdHByaXZhdGUgZ2V0IGVtb2ppVXJsKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuc2RrT3B0aW9ucz8uZW1vamlVcmwgPz8gJ2h0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9naC90d2l0dGVyL3R3ZW1vamlAMTQuMC4yL2Fzc2V0cy8nO1xyXG5cdH1cclxuXHJcbiAgICByZW5kZXJlcjogbWFya2VkLlJlbmRlcmVyO1xyXG4gICAgdHJhbnNmb3JtKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAoIXZhbHVlKVxyXG4gICAgICAgICAgICByZXR1cm4gJyc7XHJcblxyXG4gICAgICAgIGxldCBwdXJpZmllciA9IGNyZWF0ZURPTVB1cmlmeSh3aW5kb3cpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9jdXJlNTMvRE9NUHVyaWZ5L2Jsb2IvZTFjMTljZjY0MDdkNzgyYjY2NmNiMWQwMmE2YWYxOTFmOWNiYzA5ZS9kZW1vcy9ob29rcy10YXJnZXQtYmxhbmstZGVtby5odG1sXHJcbiAgICAgICAgLy8gQWRkIGEgaG9vayB0byBtYWtlIGFsbCBsaW5rcyBvcGVuIGEgbmV3IHdpbmRvd1xyXG4gICAgICAgIHB1cmlmaWVyLmFkZEhvb2soJ2FmdGVyU2FuaXRpemVBdHRyaWJ1dGVzJywgZnVuY3Rpb24obm9kZTogSFRNTEVsZW1lbnQgJiB7IHRhcmdldD86IHN0cmluZyB9KSB7XHJcbiAgICAgICAgICAgIC8vIHNldCBhbGwgZWxlbWVudHMgb3duaW5nIHRhcmdldCB0byB0YXJnZXQ9X2JsYW5rXHJcbiAgICAgICAgICAgIGlmICgndGFyZ2V0JyBpbiBub2RlKSB7XHJcbiAgICAgICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZSgndGFyZ2V0JywnX2JsYW5rJyk7XHJcbiAgICAgICAgICAgICAgICAvLyBwcmV2ZW50IGh0dHBzOi8vd3d3Lm93YXNwLm9yZy9pbmRleC5waHAvUmV2ZXJzZV9UYWJuYWJiaW5nXHJcbiAgICAgICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZSgncmVsJywgJ25vb3BlbmVyIG5vcmVmZXJyZXIgbm9mb2xsb3cnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBzZXQgbm9uLUhUTUwvTWF0aE1MIGxpbmtzIHRvIHhsaW5rOnNob3c9bmV3XHJcbiAgICAgICAgICAgIGlmICghbm9kZS5oYXNBdHRyaWJ1dGUoJ3RhcmdldCcpXHJcbiAgICAgICAgICAgICAgICAmJiAobm9kZS5oYXNBdHRyaWJ1dGUoJ3hsaW5rOmhyZWYnKVxyXG4gICAgICAgICAgICAgICAgICAgIHx8IG5vZGUuaGFzQXR0cmlidXRlKCdocmVmJykpKSB7XHJcbiAgICAgICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZSgneGxpbms6c2hvdycsICduZXcnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB2YWx1ZSA9IG1hcmtlZC5tYXJrZWQucGFyc2UodmFsdWUsIHtcclxuICAgICAgICAgICAgcmVuZGVyZXI6IHRoaXMucmVuZGVyZXJcclxuICAgICAgICB9KSBhcyBzdHJpbmc7XHJcblxyXG4gICAgICAgIHZhbHVlID0gdHdlbW9qaS5wYXJzZSh2YWx1ZSwgeyBiYXNlOiB0aGlzLmVtb2ppVXJsIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwoXHJcbiAgICAgICAgICAgIHB1cmlmaWVyLnNhbml0aXplKHZhbHVlLFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIEZPUkJJRF9UQUdTOiBbJ2gxJywgJ2gyJywgJ2gzJywgJ2g0JywgJ3N0eWxlJywgJ2xpbmsnLCAnc2NyaXB0J10sXHJcbiAgICAgICAgICAgICAgICAgICAgRk9SQklEX0FUVFI6IFsnc3R5bGUnXSxcclxuICAgICAgICAgICAgICAgICAgICBLRUVQX0NPTlRFTlQ6IHRydWVcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn0iXX0=
@@ -1,35 +0,0 @@
1
- import { Pipe } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- export class BantaMentionLinkerPipe {
4
- transform(value, links) {
5
- if (!value)
6
- return '';
7
- if (!links)
8
- return value;
9
- let text = value;
10
- for (let i = 0, max = links.length; i < max; ++i) {
11
- let mention = links[i];
12
- text = text.replace(new RegExp(`${this.escapeRegExp(mention.text)}`, `gi`), `@{${i + 1}}`);
13
- }
14
- text = text.replace(/@\{(\d+)\}/g, (text, i) => links[i - 1] ? this.formatLink(links[i - 1]) : text);
15
- return text;
16
- }
17
- formatLink(link) {
18
- return `<a${link.external ? ` target="_blank" rel="noopener"` : ``} class="mention" href="${link.link}">${link.text}</a>`;
19
- }
20
- /**
21
- * https://stackoverflow.com/questions/3446170/escape-string-for-use-in-javascript-regex
22
- */
23
- escapeRegExp(string) {
24
- return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string
25
- }
26
- }
27
- BantaMentionLinkerPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: BantaMentionLinkerPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
28
- BantaMentionLinkerPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "14.2.12", ngImport: i0, type: BantaMentionLinkerPipe, name: "mentionLinker" });
29
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: BantaMentionLinkerPipe, decorators: [{
30
- type: Pipe,
31
- args: [{
32
- name: 'mentionLinker'
33
- }]
34
- }] });
35
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudGlvbi1saW5rZXIucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Nkay9zcmMvbGliL2NvbW1vbi9tZW50aW9uLWxpbmtlci5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDOztBQU9wRCxNQUFNLE9BQU8sc0JBQXNCO0lBQy9CLFNBQVMsQ0FBQyxLQUFhLEVBQUUsS0FBNEI7UUFDakQsSUFBSSxDQUFDLEtBQUs7WUFDTixPQUFPLEVBQUUsQ0FBQztRQUVkLElBQUksQ0FBQyxLQUFLO1lBQ04sT0FBTyxLQUFLLENBQUM7UUFFakIsSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDO1FBRWpCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUU7WUFDOUMsSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3ZCLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQzlGO1FBRUQsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXJHLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxVQUFVLENBQUMsSUFBd0I7UUFDL0IsT0FBTyxLQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLGlDQUFpQyxDQUFDLENBQUMsQ0FBQyxFQUFHLDBCQUEwQixJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLE1BQU0sQ0FBQztJQUNoSSxDQUFDO0lBRUQ7O09BRUc7SUFDSCxZQUFZLENBQUMsTUFBTTtRQUNmLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLG9DQUFvQztJQUM5RixDQUFDOztvSEE3QlEsc0JBQXNCO2tIQUF0QixzQkFBc0I7NEZBQXRCLHNCQUFzQjtrQkFIbEMsSUFBSTttQkFBQztvQkFDRixJQUFJLEVBQUUsZUFBZTtpQkFDeEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xyXG5pbXBvcnQgeyBDaGF0TWVzc2FnZU1lbnRpb24gfSBmcm9tICdAYmFudGEvY29tbW9uJztcclxuXHJcbkBQaXBlKHtcclxuICAgIG5hbWU6ICdtZW50aW9uTGlua2VyJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQmFudGFNZW50aW9uTGlua2VyUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xyXG4gICAgdHJhbnNmb3JtKHZhbHVlOiBzdHJpbmcsIGxpbmtzPzogQ2hhdE1lc3NhZ2VNZW50aW9uW10pIHtcclxuICAgICAgICBpZiAoIXZhbHVlKVxyXG4gICAgICAgICAgICByZXR1cm4gJyc7XHJcblxyXG4gICAgICAgIGlmICghbGlua3MpXHJcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcclxuXHJcbiAgICAgICAgbGV0IHRleHQgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIG1heCA9IGxpbmtzLmxlbmd0aDsgaSA8IG1heDsgKytpKSB7XHJcbiAgICAgICAgICAgIGxldCBtZW50aW9uID0gbGlua3NbaV07XHJcbiAgICAgICAgICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UobmV3IFJlZ0V4cChgJHt0aGlzLmVzY2FwZVJlZ0V4cChtZW50aW9uLnRleHQpfWAsIGBnaWApLCBgQHske2kgKyAxfX1gKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoL0BcXHsoXFxkKylcXH0vZywgKHRleHQsIGkpID0+IGxpbmtzW2kgLSAxXSA/IHRoaXMuZm9ybWF0TGluayhsaW5rc1tpIC0gMV0pIDogdGV4dCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0ZXh0O1xyXG4gICAgfVxyXG5cclxuICAgIGZvcm1hdExpbmsobGluazogQ2hhdE1lc3NhZ2VNZW50aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuIGA8YSR7IGxpbmsuZXh0ZXJuYWwgPyBgIHRhcmdldD1cIl9ibGFua1wiIHJlbD1cIm5vb3BlbmVyXCJgIDogYGAgfSBjbGFzcz1cIm1lbnRpb25cIiBocmVmPVwiJHtsaW5rLmxpbmt9XCI+JHtsaW5rLnRleHR9PC9hPmA7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8zNDQ2MTcwL2VzY2FwZS1zdHJpbmctZm9yLXVzZS1pbi1qYXZhc2NyaXB0LXJlZ2V4XHJcbiAgICAgKi9cclxuICAgIGVzY2FwZVJlZ0V4cChzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1suKis/XiR7fSgpfFtcXF1cXFxcXS9nLCAnXFxcXCQmJyk7IC8vICQmIG1lYW5zIHRoZSB3aG9sZSBtYXRjaGVkIHN0cmluZ1xyXG4gICAgfVxyXG59Il19
@@ -1,83 +0,0 @@
1
- import { __decorate } from "tslib";
2
- import { Injectable } from "@banta/common";
3
- /**
4
- * Provides a way to hook in to a shared set of timers, instead of creating a timer per instance.
5
- * This is very useful for cases where the update is not extremely time-sensitive, but happens at scale.
6
- * The principal use case is the TimestampComponent. When several hundred (or several thousand) comments are
7
- * being displayed, we do not want to trigger thousands of independent relative timestamp updates, because over
8
- * time the updates will saturate the CPU since they don't perfectly align.
9
- */
10
- let TimerPool = class TimerPool {
11
- constructor() {
12
- this.subscriptions = new Map();
13
- this.newSubscriptions = new Map();
14
- this.removedSubscriptions = new Map();
15
- }
16
- addTimer(interval, callback) {
17
- if (interval <= 0) {
18
- console.warn(`Refusing to set timer with interval of ${interval}!`);
19
- return () => { };
20
- }
21
- let state;
22
- let sizeWas = this.subscriptions.size;
23
- if (!this.subscriptions.has(interval)) {
24
- state = { subscribers: [] };
25
- state.handle = setInterval(() => {
26
- console.debug(`[Banta/TimerPool] Notifying ${state.subscribers.length} subs [${interval}ms]`);
27
- state.subscribers.forEach(sub => sub());
28
- }, interval);
29
- this.subscriptions.set(interval, state);
30
- }
31
- else {
32
- state = this.subscriptions.get(interval);
33
- }
34
- state.subscribers.push(callback);
35
- // Debug information //////////////////////////
36
- //
37
- if (!this.newSubscriptions.has(interval))
38
- this.newSubscriptions.set(interval, 0);
39
- this.newSubscriptions.set(interval, (this.newSubscriptions.get(interval) ?? 0) + 1);
40
- clearTimeout(this.newSubscriptionsNotice);
41
- this.newSubscriptionsNotice = setTimeout(() => {
42
- for (let [interval, count] of this.newSubscriptions) {
43
- console.debug(`[Banta/TimerPool] ${count} new subscriptions to ${interval}ms [${state.subscribers.length} total]`);
44
- }
45
- this.newSubscriptions.clear();
46
- });
47
- //
48
- ///////////////////////////////////////////////
49
- if (sizeWas === 0) {
50
- console.debug(`[Banta/TimerPool] No longer idle.`);
51
- }
52
- // Unsubscribe function
53
- return () => {
54
- let state = this.subscriptions.get(interval);
55
- let index = state.subscribers.indexOf(callback);
56
- if (index >= 0)
57
- state.subscribers.splice(index, 1);
58
- if (state.subscribers.length === 0) {
59
- clearInterval(state.handle);
60
- this.subscriptions.delete(interval);
61
- }
62
- if (!this.removedSubscriptions.has(interval))
63
- this.removedSubscriptions.set(interval, 0);
64
- this.removedSubscriptions.set(interval, (this.removedSubscriptions.get(interval) ?? 0) + 1);
65
- // Debug information ////////////////////////////////////////////////////////////////////
66
- clearTimeout(this.removedSubscriptionsNotice);
67
- this.removedSubscriptionsNotice = setTimeout(() => {
68
- for (let [interval, count] of this.removedSubscriptions) {
69
- let state = this.subscriptions.get(interval);
70
- console.debug(`[Banta/TimerPool] ${count} unsubscribed from ${interval}ms [${state?.subscribers?.length ?? 0} remain]`);
71
- }
72
- if (this.subscriptions.size === 0)
73
- console.debug(`[Banta/TimerPool] All subscriptions have been removed. Now idle.`);
74
- this.removedSubscriptions.clear();
75
- });
76
- };
77
- }
78
- };
79
- TimerPool = __decorate([
80
- Injectable()
81
- ], TimerPool);
82
- export { TimerPool };
83
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZXItcG9vbC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2RrL3NyYy9saWIvY29tbW9uL3RpbWVyLXBvb2wuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQU8zQzs7Ozs7O0dBTUc7QUFFSCxJQUFhLFNBQVMsR0FBdEIsTUFBYSxTQUFTO0lBQXRCO1FBQ1ksa0JBQWEsR0FBRyxJQUFJLEdBQUcsRUFBc0IsQ0FBQztRQUc5QyxxQkFBZ0IsR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztRQUc3Qyx5QkFBb0IsR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztJQWdGN0QsQ0FBQztJQTlFRyxRQUFRLENBQUMsUUFBZ0IsRUFBRSxRQUFvQjtRQUMzQyxJQUFJLFFBQVEsSUFBSSxDQUFDLEVBQUU7WUFDZixPQUFPLENBQUMsSUFBSSxDQUFDLDBDQUEwQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO1lBQ3BFLE9BQU8sR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDO1NBQ25CO1FBRUQsSUFBSSxLQUFpQixDQUFDO1FBQ3RCLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDO1FBRXRDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNuQyxLQUFLLEdBQUcsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLENBQUM7WUFDNUIsS0FBSyxDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUMsR0FBRyxFQUFFO2dCQUM1QixPQUFPLENBQUMsS0FBSyxDQUFDLCtCQUErQixLQUFLLENBQUMsV0FBVyxDQUFDLE1BQU0sVUFBVSxRQUFRLEtBQUssQ0FBQyxDQUFDO2dCQUM5RixLQUFLLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFB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QyxhQUFhLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUM3QyxPQUFPLENBQUMsS0FBSyxDQUFDLHFCQUFxQixLQUFLLHNCQUFzQixRQUFRLE9BQU8sS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztpQkFDM0g7Z0JBRUQsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksS0FBSyxDQUFDO29CQUM3QixPQUFPLENBQUMsS0FBSyxDQUFDLGtFQUFrRSxDQUFDLENBQUM7Z0JBRXRGLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUN0QyxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQztJQUNOLENBQUM7Q0FDSixDQUFBO0FBdkZZLFNBQVM7SUFEckIsVUFBVSxFQUFFO0dBQ0EsU0FBUyxDQXVGckI7U0F2RlksU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGJhbnRhL2NvbW1vblwiO1xyXG5cclxuaW50ZXJmYWNlIFRpbWVyU3RhdGUge1xyXG4gICAgaGFuZGxlPztcclxuICAgIHN1YnNjcmliZXJzOiAoKCkgPT4gdm9pZClbXTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFByb3ZpZGVzIGEgd2F5IHRvIGhvb2sgaW4gdG8gYSBzaGFyZWQgc2V0IG9mIHRpbWVycywgaW5zdGVhZCBvZiBjcmVhdGluZyBhIHRpbWVyIHBlciBpbnN0YW5jZS5cclxuICogVGhpcyBpcyB2ZXJ5IHVzZWZ1bCBmb3IgY2FzZXMgd2hlcmUgdGhlIHVwZGF0ZSBpcyBub3QgZXh0cmVtZWx5IHRpbWUtc2Vuc2l0aXZlLCBidXQgaGFwcGVucyBhdCBzY2FsZS5cclxuICogVGhlIHByaW5jaXBhbCB1c2UgY2FzZSBpcyB0aGUgVGltZXN0YW1wQ29tcG9uZW50LiBXaGVuIHNldmVyYWwgaHVuZHJlZCAob3Igc2V2ZXJhbCB0aG91c2FuZCkgY29tbWVudHMgYXJlIFxyXG4gKiBiZWluZyBkaXNwbGF5ZWQsIHdlIGRvIG5vdCB3YW50IHRvIHRyaWdnZXIgdGhvdXNhbmRzIG9mIGluZGVwZW5kZW50IHJlbGF0aXZlIHRpbWVzdGFtcCB1cGRhdGVzLCBiZWNhdXNlIG92ZXIgXHJcbiAqIHRpbWUgdGhlIHVwZGF0ZXMgd2lsbCBzYXR1cmF0ZSB0aGUgQ1BVIHNpbmNlIHRoZXkgZG9uJ3QgcGVyZmVjdGx5IGFsaWduLiBcclxuICovXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIFRpbWVyUG9vbCB7XHJcbiAgICBwcml2YXRlIHN1YnNjcmlwdGlvbnMgPSBuZXcgTWFwPG51bWJlciwgVGltZXJTdGF0ZT4oKTtcclxuXHJcbiAgICBwcml2YXRlIG5ld1N1YnNjcmlwdGlvbnNOb3RpY2U7XHJcbiAgICBwcml2YXRlIG5ld1N1YnNjcmlwdGlvbnMgPSBuZXcgTWFwPG51bWJlciwgbnVtYmVyPigpO1xyXG5cclxuICAgIHByaXZhdGUgcmVtb3ZlZFN1YnNjcmlwdGlvbnNOb3RpY2U7XHJcbiAgICBwcml2YXRlIHJlbW92ZWRTdWJzY3JpcHRpb25zID0gbmV3IE1hcDxudW1iZXIsIG51bWJlcj4oKTtcclxuXHJcbiAgICBhZGRUaW1lcihpbnRlcnZhbDogbnVtYmVyLCBjYWxsYmFjazogKCkgPT4gdm9pZCkge1xyXG4gICAgICAgIGlmIChpbnRlcnZhbCA8PSAwKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihgUmVmdXNpbmcgdG8gc2V0IHRpbWVyIHdpdGggaW50ZXJ2YWwgb2YgJHtpbnRlcnZhbH0hYCk7XHJcbiAgICAgICAgICAgIHJldHVybiAoKSA9PiB7fTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBzdGF0ZTogVGltZXJTdGF0ZTtcclxuICAgICAgICBsZXQgc2l6ZVdhcyA9IHRoaXMuc3Vic2NyaXB0aW9ucy5zaXplO1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuc3Vic2NyaXB0aW9ucy5oYXMoaW50ZXJ2YWwpKSB7XHJcbiAgICAgICAgICAgIHN0YXRlID0geyBzdWJzY3JpYmVyczogW10gfTtcclxuICAgICAgICAgICAgc3RhdGUuaGFuZGxlID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5kZWJ1ZyhgW0JhbnRhL1RpbWVyUG9vbF0gTm90aWZ5aW5nICR7c3RhdGUuc3Vic2NyaWJlcnMubGVuZ3RofSBzdWJzIFske2ludGVydmFsfW1zXWApO1xyXG4gICAgICAgICAgICAgICAgc3RhdGUuc3Vic2NyaWJlcnMuZm9yRWFjaChzdWIgPT4gc3ViKCkpO1xyXG4gICAgICAgICAgICB9LCBpbnRlcnZhbCk7XHJcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5zZXQoaW50ZXJ2YWwsIHN0YXRlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzdGF0ZSA9IHRoaXMuc3Vic2NyaXB0aW9ucy5nZXQoaW50ZXJ2YWwpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3RhdGUuc3Vic2NyaWJlcnMucHVzaChjYWxsYmFjayk7XHJcblxyXG4gICAgICAgIC8vIERlYnVnIGluZm9ybWF0aW9uIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgICAgICAgLy9cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLm5ld1N1YnNjcmlwdGlvbnMuaGFzKGludGVydmFsKSlcclxuICAgICAgICAgICAgdGhpcy5uZXdTdWJzY3JpcHRpb25zLnNldChpbnRlcnZhbCwgMCk7XHJcbiAgICAgICAgdGhpcy5uZXdTdWJzY3JpcHRpb25zLnNldChpbnRlcnZhbCwgKHRoaXMubmV3U3Vic2NyaXB0aW9ucy5nZXQoaW50ZXJ2YWwpID8/IDApICsgMSk7XHJcblxyXG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLm5ld1N1YnNjcmlwdGlvbnNOb3RpY2UpO1xyXG4gICAgICAgIHRoaXMubmV3U3Vic2NyaXB0aW9uc05vdGljZSA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBbaW50ZXJ2YWwsIGNvdW50XSBvZiB0aGlzLm5ld1N1YnNjcmlwdGlvbnMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoYFtCYW50YS9UaW1lclBvb2xdICR7Y291bnR9IG5ldyBzdWJzY3JpcHRpb25zIHRvICR7aW50ZXJ2YWx9bXMgWyR7c3RhdGUuc3Vic2NyaWJlcnMubGVuZ3RofSB0b3RhbF1gKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5uZXdTdWJzY3JpcHRpb25zLmNsZWFyKCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vXHJcbiAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuXHJcbiAgICAgICAgaWYgKHNpemVXYXMgPT09IDApIHtcclxuICAgICAgICAgICAgY29uc29sZS5kZWJ1ZyhgW0JhbnRhL1RpbWVyUG9vbF0gTm8gbG9uZ2VyIGlkbGUuYCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBVbnN1YnNjcmliZSBmdW5jdGlvbiBcclxuXHJcbiAgICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICAgICAgbGV0IHN0YXRlID0gdGhpcy5zdWJzY3JpcHRpb25zLmdldChpbnRlcnZhbCk7XHJcbiAgICAgICAgICAgIGxldCBpbmRleCA9IHN0YXRlLnN1YnNjcmliZXJzLmluZGV4T2YoY2FsbGJhY2spO1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggPj0gMClcclxuICAgICAgICAgICAgICAgIHN0YXRlLnN1YnNjcmliZXJzLnNwbGljZShpbmRleCwgMSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoc3RhdGUuc3Vic2NyaWJlcnMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKHN0YXRlLmhhbmRsZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZGVsZXRlKGludGVydmFsKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCF0aGlzLnJlbW92ZWRTdWJzY3JpcHRpb25zLmhhcyhpbnRlcnZhbCkpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZWRTdWJzY3JpcHRpb25zLnNldChpbnRlcnZhbCwgMCk7XHJcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlZFN1YnNjcmlwdGlvbnMuc2V0KGludGVydmFsLCAodGhpcy5yZW1vdmVkU3Vic2NyaXB0aW9ucy5nZXQoaW50ZXJ2YWwpID8/IDApICsgMSk7XHJcblxyXG4gICAgICAgICAgICAvLyBEZWJ1ZyBpbmZvcm1hdGlvbiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG5cclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMucmVtb3ZlZFN1YnNjcmlwdGlvbnNOb3RpY2UpO1xyXG4gICAgICAgICAgICB0aGlzLnJlbW92ZWRTdWJzY3JpcHRpb25zTm90aWNlID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBbaW50ZXJ2YWwsIGNvdW50XSBvZiB0aGlzLnJlbW92ZWRTdWJzY3JpcHRpb25zKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHN0YXRlID0gdGhpcy5zdWJzY3JpcHRpb25zLmdldChpbnRlcnZhbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5kZWJ1ZyhgW0JhbnRhL1RpbWVyUG9vbF0gJHtjb3VudH0gdW5zdWJzY3JpYmVkIGZyb20gJHtpbnRlcnZhbH1tcyBbJHtzdGF0ZT8uc3Vic2NyaWJlcnM/Lmxlbmd0aCA/PyAwfSByZW1haW5dYCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9ucy5zaXplID09PSAwKVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoYFtCYW50YS9UaW1lclBvb2xdIEFsbCBzdWJzY3JpcHRpb25zIGhhdmUgYmVlbiByZW1vdmVkLiBOb3cgaWRsZS5gKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZWRTdWJzY3JpcHRpb25zLmNsZWFyKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn0iXX0=