@banta/sdk 4.6.27 → 4.7.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 (129) hide show
  1. package/README.md +2 -2
  2. package/{esm2015/banta-sdk.js → esm2020/banta-sdk.mjs} +0 -0
  3. package/{esm2015/lib/attachment-scraper.js → esm2020/lib/attachment-scraper.mjs} +0 -0
  4. package/esm2020/lib/banta/banta.component.mjs +204 -0
  5. package/esm2020/lib/banta-logo.component.mjs +11 -0
  6. package/esm2020/lib/banta-sdk.module.mjs +144 -0
  7. package/esm2020/lib/chat/banta-chat/banta-chat.component.mjs +185 -0
  8. package/esm2020/lib/chat/chat-message/chat-message.component.mjs +62 -0
  9. package/esm2020/lib/chat/chat-view/chat-view.component.mjs +170 -0
  10. package/esm2020/lib/chat/chat.module.mjs +51 -0
  11. package/{esm2015/lib/chat/index.js → esm2020/lib/chat/index.mjs} +0 -0
  12. package/esm2020/lib/chat/live-chat-message.component.mjs +80 -0
  13. package/{esm2015/lib/chat-backend-base.js → esm2020/lib/chat-backend-base.mjs} +0 -0
  14. package/esm2020/lib/chat-backend.mjs +83 -0
  15. package/{esm2015/lib/chat-source-base.js → esm2020/lib/chat-source-base.mjs} +0 -0
  16. package/esm2020/lib/chat-source.mjs +169 -0
  17. package/esm2020/lib/comments/attachment-button/attachment-button.component.mjs +69 -0
  18. package/esm2020/lib/comments/attachment-scraper.directive.mjs +107 -0
  19. package/esm2020/lib/comments/banta-comments/banta-comments.component.mjs +666 -0
  20. package/esm2020/lib/comments/comment/comment.component.mjs +217 -0
  21. package/esm2020/lib/comments/comment-field/comment-field.component.mjs +377 -0
  22. package/esm2020/lib/comments/comment-sort/comment-sort.component.mjs +37 -0
  23. package/esm2020/lib/comments/comment-view/comment-view.component.mjs +379 -0
  24. package/esm2020/lib/comments/comments.module.mjs +111 -0
  25. package/{esm2015/lib/comments/index.js → esm2020/lib/comments/index.mjs} +0 -0
  26. package/esm2020/lib/comments/live-comment.component.mjs +80 -0
  27. package/esm2020/lib/comments/reply-send-options.directive.mjs +13 -0
  28. package/esm2020/lib/common/attachment/attachment.component.mjs +113 -0
  29. package/esm2020/lib/common/attachments/attachments.component.mjs +72 -0
  30. package/esm2020/lib/common/common.module.mjs +59 -0
  31. package/{esm2015/lib/common/index.js → esm2020/lib/common/index.mjs} +0 -0
  32. package/{esm2015/lib/common/lazy-connection.js → esm2020/lib/common/lazy-connection.mjs} +0 -0
  33. package/esm2020/lib/common/lightbox/lightbox.component.mjs +31 -0
  34. package/esm2020/lib/common/markdown-to-html.pipe.mjs +76 -0
  35. package/esm2020/lib/common/mention-linker.pipe.mjs +35 -0
  36. package/esm2020/lib/common/timestamp.component.mjs +113 -0
  37. package/esm2020/lib/common/trust-resource-url.pipe.mjs +22 -0
  38. package/esm2020/lib/emoji/emoji-selector-button.component.mjs +113 -0
  39. package/esm2020/lib/emoji/emoji-selector-panel/emoji-selector-panel.component.mjs +88 -0
  40. package/esm2020/lib/emoji/emoji.module.mjs +55 -0
  41. package/{esm2015/lib/emoji/emojis.js → esm2020/lib/emoji/emojis.mjs} +0 -0
  42. package/{esm2015/lib/emoji/index.js → esm2020/lib/emoji/index.mjs} +0 -0
  43. package/esm2020/lib/giphy-attachments.mjs +16 -0
  44. package/{esm2015/lib/index.js → esm2020/lib/index.mjs} +0 -0
  45. package/esm2020/lib/live-message.component.mjs +96 -0
  46. package/{esm2015/lib/message-menu-item.js → esm2020/lib/message-menu-item.mjs} +0 -0
  47. package/{esm2015/lib/sdk-options.js → esm2020/lib/sdk-options.mjs} +0 -0
  48. package/esm2020/lib/tweet-attachments.mjs +13 -0
  49. package/esm2020/lib/url-attachments.mjs +42 -0
  50. package/esm2020/lib/youtube-attachments.mjs +22 -0
  51. package/{esm2015/public-api.js → esm2020/public-api.mjs} +1 -1
  52. package/fesm2015/{banta-sdk.js → banta-sdk.mjs} +2559 -2239
  53. package/fesm2015/banta-sdk.mjs.map +1 -0
  54. package/fesm2020/banta-sdk.mjs +10490 -0
  55. package/fesm2020/banta-sdk.mjs.map +1 -0
  56. package/{banta-sdk.d.ts → index.d.ts} +1 -0
  57. package/lib/banta/banta.component.d.ts +3 -0
  58. package/lib/banta-logo.component.d.ts +3 -0
  59. package/lib/banta-sdk.module.d.ts +24 -0
  60. package/lib/chat/banta-chat/banta-chat.component.d.ts +3 -0
  61. package/lib/chat/chat-message/chat-message.component.d.ts +3 -0
  62. package/lib/chat/chat-view/chat-view.component.d.ts +3 -0
  63. package/lib/chat/chat.module.d.ts +13 -0
  64. package/lib/chat/live-chat-message.component.d.ts +3 -0
  65. package/lib/chat-backend.d.ts +3 -0
  66. package/lib/comments/attachment-button/attachment-button.component.d.ts +3 -0
  67. package/lib/comments/attachment-scraper.directive.d.ts +3 -0
  68. package/lib/comments/banta-comments/banta-comments.component.d.ts +3 -0
  69. package/lib/comments/comment/comment.component.d.ts +3 -0
  70. package/lib/comments/comment-field/comment-field.component.d.ts +3 -0
  71. package/lib/comments/comment-sort/comment-sort.component.d.ts +3 -0
  72. package/lib/comments/comment-view/comment-view.component.d.ts +3 -0
  73. package/lib/comments/comments.module.d.ts +28 -0
  74. package/lib/comments/live-comment.component.d.ts +3 -0
  75. package/lib/comments/reply-send-options.directive.d.ts +3 -0
  76. package/lib/common/attachment/attachment.component.d.ts +3 -0
  77. package/lib/common/attachments/attachments.component.d.ts +3 -0
  78. package/lib/common/common.module.d.ts +15 -0
  79. package/lib/common/lightbox/lightbox.component.d.ts +3 -0
  80. package/lib/common/markdown-to-html.pipe.d.ts +3 -0
  81. package/lib/common/mention-linker.pipe.d.ts +3 -0
  82. package/lib/common/timestamp.component.d.ts +3 -0
  83. package/lib/common/trust-resource-url.pipe.d.ts +3 -0
  84. package/lib/emoji/emoji-selector-button.component.d.ts +3 -0
  85. package/lib/emoji/emoji-selector-panel/emoji-selector-panel.component.d.ts +3 -0
  86. package/lib/emoji/emoji.module.d.ts +14 -0
  87. package/lib/live-message.component.d.ts +3 -0
  88. package/lib/url-attachments.d.ts +3 -0
  89. package/package.json +22 -10
  90. package/banta-sdk.metadata.json +0 -1
  91. package/bundles/banta-sdk.umd.js +0 -11913
  92. package/bundles/banta-sdk.umd.js.map +0 -1
  93. package/esm2015/lib/banta/banta.component.js +0 -200
  94. package/esm2015/lib/banta-logo.component.js +0 -20
  95. package/esm2015/lib/banta-sdk.module.js +0 -98
  96. package/esm2015/lib/chat/banta-chat/banta-chat.component.js +0 -174
  97. package/esm2015/lib/chat/chat-message/chat-message.component.js +0 -56
  98. package/esm2015/lib/chat/chat-view/chat-view.component.js +0 -167
  99. package/esm2015/lib/chat/chat.module.js +0 -32
  100. package/esm2015/lib/chat/live-chat-message.component.js +0 -71
  101. package/esm2015/lib/chat-backend.js +0 -92
  102. package/esm2015/lib/chat-source.js +0 -199
  103. package/esm2015/lib/comments/attachment-button/attachment-button.component.js +0 -70
  104. package/esm2015/lib/comments/attachment-scraper.directive.js +0 -109
  105. package/esm2015/lib/comments/banta-comments/banta-comments.component.js +0 -678
  106. package/esm2015/lib/comments/comment/comment.component.js +0 -186
  107. package/esm2015/lib/comments/comment-field/comment-field.component.js +0 -350
  108. package/esm2015/lib/comments/comment-sort/comment-sort.component.js +0 -34
  109. package/esm2015/lib/comments/comment-view/comment-view.component.js +0 -364
  110. package/esm2015/lib/comments/comments.module.js +0 -62
  111. package/esm2015/lib/comments/live-comment.component.js +0 -71
  112. package/esm2015/lib/comments/reply-send-options.directive.js +0 -9
  113. package/esm2015/lib/common/attachment/attachment.component.js +0 -105
  114. package/esm2015/lib/common/attachments/attachments.component.js +0 -65
  115. package/esm2015/lib/common/common.module.js +0 -36
  116. package/esm2015/lib/common/lightbox/lightbox.component.js +0 -30
  117. package/esm2015/lib/common/markdown-to-html.pipe.js +0 -75
  118. package/esm2015/lib/common/mention-linker.pipe.js +0 -31
  119. package/esm2015/lib/common/timestamp.component.js +0 -106
  120. package/esm2015/lib/common/trust-resource-url.pipe.js +0 -21
  121. package/esm2015/lib/emoji/emoji-selector-button.component.js +0 -107
  122. package/esm2015/lib/emoji/emoji-selector-panel/emoji-selector-panel.component.js +0 -86
  123. package/esm2015/lib/emoji/emoji.module.js +0 -34
  124. package/esm2015/lib/giphy-attachments.js +0 -20
  125. package/esm2015/lib/live-message.component.js +0 -74
  126. package/esm2015/lib/tweet-attachments.js +0 -16
  127. package/esm2015/lib/url-attachments.js +0 -46
  128. package/esm2015/lib/youtube-attachments.js +0 -25
  129. package/fesm2015/banta-sdk.js.map +0 -1
@@ -1,364 +0,0 @@
1
- import { __awaiter } from "tslib";
2
- import { Component, Input, ViewChild, Output, HostBinding, ViewChildren } from "@angular/core";
3
- import { CommentsOrder } from '@banta/common';
4
- import { Subject, Subscription } from 'rxjs';
5
- import { ChatBackendBase } from "../../chat-backend-base";
6
- import { CommentComponent } from "../comment/comment.component";
7
- export class CommentViewComponent {
8
- constructor(backend) {
9
- this.backend = backend;
10
- this._sourceSubs = new Subscription();
11
- this._selected = new Subject();
12
- this._liked = new Subject();
13
- this._unliked = new Subject();
14
- this._reported = new Subject();
15
- this._userSelected = new Subject();
16
- this._usernameSelected = new Subject();
17
- this._avatarSelected = new Subject();
18
- this._shared = new Subject();
19
- this._deleted = new Subject();
20
- this._messageEdited = new Subject();
21
- this.showEmptyState = true;
22
- this.allowReplies = true;
23
- this.customMenuItems = [];
24
- this.menuMessage = null;
25
- this.messages = [];
26
- this.customSortEnabled = false;
27
- this.sourceLoaded = new Promise(r => this.markSourceLoaded = r);
28
- this.maxMessages = 2000;
29
- this.maxVisibleMessages = 200;
30
- this.newestLast = false;
31
- this.isViewingMore = false;
32
- this.isLoadingMore = false;
33
- this.hasMore = false;
34
- this.newMessages = [];
35
- this.olderMessages = [];
36
- this.sortOrderChanged = new Subject();
37
- }
38
- get comments() {
39
- return Array.from(this.commentsQuery);
40
- }
41
- /**
42
- * Returns true if this message can be found within one of the message buffers (older, current, newer)
43
- * @param message
44
- */
45
- isMessageLoadedInContext(message) {
46
- return this.olderMessages.find(x => x.id === message.id)
47
- || this.messages.find(x => x.id === message.id)
48
- || this.newMessages.find(x => x.id === message.id);
49
- }
50
- loadMessageInContext(message) {
51
- return __awaiter(this, void 0, void 0, function* () {
52
- yield this.sourceLoaded;
53
- console.log(`Loading message ${message.id} in context...`);
54
- while (this.hasMore && !this.isMessageLoadedInContext(message)) {
55
- console.log(`...Need to load more comments to find ${message.id}`);
56
- yield this.showMore();
57
- }
58
- if (!this.isMessageLoadedInContext(message)) {
59
- console.error(`Error while loading message in context: Failed to find message ${message.id}, maybe it was deleted!`);
60
- return false;
61
- }
62
- let pageSize = this.maxVisibleMessages;
63
- let items = [].concat(this.olderMessages, this.messages, this.newMessages);
64
- let index = items.findIndex(x => x.id === message.id);
65
- if (index < 0) {
66
- console.error(`Error while loading message in context: Message was not present in message list!`);
67
- return false;
68
- }
69
- let startIndex = Math.max(0, index - pageSize / 2);
70
- this.newMessages = items.splice(0, startIndex);
71
- this.messages = items.splice(0, pageSize);
72
- this.olderMessages = items;
73
- this.isViewingMore = true;
74
- });
75
- }
76
- /**
77
- * Get the CommentComponent instantiated for the given ChatMessage,
78
- * if it exists in the current view. Note that messages which are not
79
- * currently shown to the user will not return a CommentComponent.
80
- * @param message
81
- * @returns
82
- */
83
- getCommentComponentForMessage(message) {
84
- if (!message)
85
- throw new Error(`You must pass a valid ChatMessage`);
86
- return this.comments.find(x => { var _a; return ((_a = x.message) === null || _a === void 0 ? void 0 : _a.id) === message.id; });
87
- }
88
- get selected() {
89
- return this._selected;
90
- }
91
- get messageEdited() {
92
- return this._messageEdited.asObservable();
93
- }
94
- saveEdit(message, newMessage) {
95
- this._messageEdited.next({ message, newMessage });
96
- }
97
- get userSelected() { return this._userSelected; }
98
- get reported() { return this._reported; }
99
- get liked() { return this._liked; }
100
- get unliked() { return this._unliked; }
101
- get usernameSelected() { return this._usernameSelected; }
102
- get avatarSelected() { return this._avatarSelected; }
103
- get shared() { return this._shared; }
104
- get deleted() { return this._deleted; }
105
- get source() {
106
- return this._source;
107
- }
108
- likeMessage(message) {
109
- this._liked.next(message);
110
- }
111
- unlikeMessage(message) {
112
- this._unliked.next(message);
113
- }
114
- reportMessage(message) {
115
- this._reported.next(message);
116
- }
117
- selectMessage(message) {
118
- this._selected.next(message);
119
- }
120
- selectMessageUser(message) {
121
- this._userSelected.next(message);
122
- }
123
- selectUsername(user) {
124
- this._usernameSelected.next(user);
125
- }
126
- selectAvatar(user) {
127
- this._avatarSelected.next(user);
128
- }
129
- sharedMessage(message) {
130
- this._shared.next(message);
131
- }
132
- startEditing(message) {
133
- this.messages.forEach(m => m.transientState.editing = false);
134
- message.transientState.editing = true;
135
- }
136
- deleteMessage(message) {
137
- this._deleted.next(message);
138
- }
139
- set source(value) {
140
- this.customSortEnabled = (value === null || value === void 0 ? void 0 : value.sortOrder) !== CommentsOrder.NEWEST;
141
- this.newMessages = [];
142
- this.olderMessages = [];
143
- window.bantaSourceDebug = value;
144
- if (this._sourceSubs) {
145
- this._sourceSubs.unsubscribe();
146
- this._sourceSubs = null;
147
- }
148
- this._source = value;
149
- if (value) {
150
- const messages = (value.messages || []).slice();
151
- this.messages = messages;
152
- this.olderMessages = messages.splice(this.maxVisibleMessages, messages.length);
153
- this.hasMore = true; //this.olderMessages.length > 0;
154
- this._sourceSubs = new Subscription();
155
- this._sourceSubs.add(this._source.messageReceived.subscribe(msg => this.messageReceived(msg)));
156
- this._sourceSubs.add(this._source.messageSent.subscribe(msg => this.messageSent(msg)));
157
- this._sourceSubs.add(this.backend.userChanged.subscribe(user => this.currentUser = user));
158
- this.getInitialMessages();
159
- }
160
- }
161
- getInitialMessages() {
162
- return __awaiter(this, void 0, void 0, function* () {
163
- let messages = (yield this._source.getExistingMessages());
164
- messages.forEach(m => { var _a; return (_a = m.transientState) !== null && _a !== void 0 ? _a : (m.transientState = {}); });
165
- this.messages = this.newestLast ? messages.slice().reverse() : messages;
166
- this.sortMessages();
167
- if (this.markSourceLoaded)
168
- this.markSourceLoaded();
169
- });
170
- }
171
- messageIdentity(index, chatMessage) {
172
- return chatMessage.id;
173
- }
174
- showNew() {
175
- return __awaiter(this, void 0, void 0, function* () {
176
- let naturalOrder = CommentsOrder.NEWEST;
177
- if (this.source && this.source.sortOrder !== naturalOrder) {
178
- this.sortOrderChanged.next(naturalOrder);
179
- return;
180
- }
181
- this.isViewingMore = false;
182
- if (this.newestLast)
183
- this.messages = this.messages.concat(this.newMessages.splice(0, this.newMessages.length));
184
- else
185
- this.messages = this.newMessages.splice(0, this.newMessages.length).concat(this.messages);
186
- let overflow = this.messages.splice(this.maxVisibleMessages, this.messages.length);
187
- this.olderMessages = overflow.concat(this.olderMessages);
188
- this.olderMessages.splice(this.maxMessages - this.maxVisibleMessages, this.olderMessages.length);
189
- this.hasMore = this.olderMessages.length > 0;
190
- });
191
- }
192
- showMore() {
193
- var _a, _b;
194
- return __awaiter(this, void 0, void 0, function* () {
195
- this.isViewingMore = true;
196
- if (this.olderMessages.length > 0) {
197
- this.isLoadingMore = false;
198
- this.messages = this.messages.concat(this.olderMessages.splice(0, 50));
199
- }
200
- this.isLoadingMore = true;
201
- let nextPageSize = 20;
202
- let lastMessage;
203
- if (this.newestLast) {
204
- lastMessage = (_a = this.olderMessages[0]) !== null && _a !== void 0 ? _a : this.messages[0];
205
- }
206
- else {
207
- lastMessage = (_b = this.olderMessages[this.olderMessages.length - 1]) !== null && _b !== void 0 ? _b : this.messages[this.messages.length - 1];
208
- }
209
- if (!lastMessage) {
210
- this.isLoadingMore = false;
211
- this.hasMore = false;
212
- return;
213
- }
214
- let messages = yield this.source.loadAfter(lastMessage, nextPageSize);
215
- if (this.newestLast)
216
- messages = messages.slice().reverse();
217
- messages.forEach(m => { var _a; return (_a = m.transientState) !== null && _a !== void 0 ? _a : (m.transientState = {}); });
218
- if (this.newestLast)
219
- this.messages = messages.concat(this.messages);
220
- else
221
- this.messages = this.messages.concat(messages);
222
- this.isLoadingMore = false;
223
- if (messages.length === 0) {
224
- console.log(`Reached the end of the list.`);
225
- this.hasMore = false;
226
- }
227
- });
228
- }
229
- addMessage(message) {
230
- var _a;
231
- if (!message.transientState)
232
- (_a = message.transientState) !== null && _a !== void 0 ? _a : (message.transientState = {});
233
- let destination = this.messages;
234
- let bucket = this.olderMessages;
235
- let newestLast = this.newestLast;
236
- if (this.isViewingMore) {
237
- destination = this.newMessages;
238
- bucket = null;
239
- }
240
- if (newestLast) {
241
- destination.push(message);
242
- let overflow = destination.splice(this.maxVisibleMessages, destination.length);
243
- bucket === null || bucket === void 0 ? void 0 : bucket.push(...overflow);
244
- }
245
- else {
246
- destination.unshift(message);
247
- let overflow = destination.splice(this.maxVisibleMessages, destination.length);
248
- bucket === null || bucket === void 0 ? void 0 : bucket.unshift(...overflow);
249
- }
250
- if ((bucket === null || bucket === void 0 ? void 0 : bucket.length) > 0)
251
- this.hasMore = true;
252
- message.pagingCursor = String(this.incrementPagingCursors());
253
- this.sortMessages();
254
- }
255
- incrementPagingCursors() {
256
- if (this.source.sortOrder !== CommentsOrder.NEWEST)
257
- return;
258
- let maxPagingCursor = 0;
259
- for (let group of [this.messages, this.olderMessages, this.newMessages]) {
260
- for (let message of group) {
261
- if (message.pagingCursor) {
262
- let pagingCursor = Number(message.pagingCursor) + 1;
263
- if (pagingCursor > maxPagingCursor)
264
- maxPagingCursor = pagingCursor;
265
- message.pagingCursor = String(pagingCursor);
266
- }
267
- }
268
- }
269
- return maxPagingCursor;
270
- }
271
- /**
272
- * Wait for all currently visible comments to be fully loaded, including all attachments.
273
- * Doing this will prevent layout shift when scrolling to a specific comment.
274
- */
275
- waitForAllCommentsToLoad() {
276
- return __awaiter(this, void 0, void 0, function* () {
277
- yield new Promise(r => setTimeout(r, 100));
278
- yield this.sourceLoaded;
279
- yield Promise.all(this.comments.map(x => x.waitForLoad()));
280
- });
281
- }
282
- sortMessages() {
283
- if (!this.source)
284
- return;
285
- let sorter;
286
- if (this.source.sortOrder === CommentsOrder.LIKES)
287
- sorter = (a, b) => b.likes - a.likes;
288
- else if (this.source.sortOrder === CommentsOrder.NEWEST)
289
- sorter = (a, b) => (b.sentAt - a.sentAt) * (this.newestLast ? -1 : 1);
290
- else if (this.source.sortOrder === CommentsOrder.OLDEST)
291
- sorter = (a, b) => (a.sentAt - b.sentAt) * (this.newestLast ? -1 : 1);
292
- this.messages.sort(sorter);
293
- this.olderMessages.sort(sorter);
294
- this.newMessages.sort(sorter);
295
- }
296
- messageReceived(message) {
297
- this.addMessage(message);
298
- if (this.isScrolledToLatest())
299
- setTimeout(() => this.scrollToLatest());
300
- }
301
- isScrolledToLatest() {
302
- if (!this.messageContainer)
303
- return false;
304
- const el = this.messageContainer.nativeElement;
305
- const currentScroll = el.scrollTop;
306
- const currentTotal = el.scrollHeight - el.offsetHeight;
307
- return currentScroll > currentTotal - 10;
308
- }
309
- messageSent(message) {
310
- this.addMessage(message);
311
- if (!this.messageContainer)
312
- return;
313
- this.scrollToLatest();
314
- }
315
- scrollToLatest() {
316
- if (!this.messageContainer)
317
- return;
318
- const el = this.messageContainer.nativeElement;
319
- el.scrollTop = el.scrollHeight;
320
- }
321
- mentionsMe(message) {
322
- if (!this.currentUser)
323
- return false;
324
- if (message.message.includes(`@${this.currentUser.username}`))
325
- return true;
326
- return false;
327
- }
328
- }
329
- CommentViewComponent.decorators = [
330
- { type: Component, args: [{
331
- selector: 'banta-comment-view',
332
- template: "<div class=\"message-container\">\r\n <ng-content select=\"[data-before]\"></ng-content>\r\n\r\n <a mat-button class=\"nav\" [class.visible]=\"!newestLast && (isViewingMore || customSortEnabled)\" href=\"javascript:;\" (click)=\"showNew()\">\r\n <mat-icon>file_upload</mat-icon>\r\n New\r\n <ng-container *ngIf=\"newMessages.length >= 1\">\r\n ({{newMessages.length}})\r\n </ng-container>\r\n </a>\r\n <a mat-button class=\"nav\" [class.visible]=\"newestLast && hasMore && !isLoadingMore\" href=\"javascript:;\" (click)=\"showMore()\">Show earlier</a>\r\n\r\n <ng-container *ngIf=\"messages.length === 0\">\r\n <div class=\"empty-state\" *ngIf=\"showEmptyState\">\r\n Be the first to comment!\r\n </div>\r\n </ng-container>\r\n <ng-container *ngFor=\"let message of messages; trackBy: messageIdentity\">\r\n <banta-comment\r\n *ngIf=\"!message.hidden\"\r\n class=\"abbreviated\"\r\n \r\n [customMenuItems]=\"customMenuItems\"\r\n [message]=\"message\"\r\n [mine]=\"currentUser?.id === message.user?.id\"\r\n [permissions]=\"source?.permissions\"\r\n [showReplyAction]=\"allowReplies\"\r\n [editing]=\"message.transientState.editing\"\r\n [genericAvatarUrl]=\"genericAvatarUrl\"\r\n (click)=\"isViewingMore = true\"\r\n (editStarted)=\"startEditing(message)\"\r\n (deleted)=\"deleteMessage(message)\"\r\n (editEnded)=\"message.transientState.editing = false\"\r\n (edited)=\"saveEdit(message, $event)\"\r\n (userSelected)=\"selectMessageUser(message)\"\r\n (avatarSelected)=\"selectAvatar($event)\"\r\n (usernameSelected)=\"selectUsername($event)\"\r\n (liked)=\"likeMessage(message)\"\r\n (unliked)=\"unlikeMessage(message)\"\r\n (reported)=\"reportMessage(message)\"\r\n (selected)=\"selectMessage(message)\"\r\n (shared)=\"sharedMessage($event)\"\r\n ></banta-comment>\r\n <div class=\"inline-replies-container\" *ngIf=\"selectedMessage === message\">\r\n <ng-content select=\".inline-replies\"></ng-content>\r\n </div>\r\n </ng-container>\r\n\r\n <a mat-button class=\"nav\" [class.visible]=\"newestLast && (isViewingMore || customSortEnabled)\" href=\"javascript:;\" (click)=\"showNew()\">\r\n <mat-icon>file_download</mat-icon>\r\n New\r\n <ng-container *ngIf=\"newMessages.length >= 1\">\r\n ({{newMessages.length}})\r\n </ng-container>\r\n </a>\r\n <a mat-button class=\"nav\" [class.visible]=\"!newestLast && hasMore && !isLoadingMore\" href=\"javascript:;\" (click)=\"showMore()\">Show more</a>\r\n\r\n <div class=\"loading-more\" *ngIf=\"isLoadingMore\">\r\n <mat-spinner></mat-spinner>\r\n </div>\r\n\r\n <!-- <div style=\"color: #666\">\r\n n={{newMessages.length}}, m={{messages.length}}, o={{olderMessages.length}},\r\n v={{maxVisibleMessages}}, M={{maxMessages}}\r\n </div> -->\r\n\r\n <ng-content select=\":not([data-before]):not(.inline-replies)\"></ng-content>\r\n</div>\r\n",
333
- styles: [":host{flex-grow:1;display:flex;flex-direction:column;opacity:1;transition:.2s opacity ease-in}.message-container{flex-grow:1;overflow-x:hidden;color:#111;background:white;padding:.5em 1em 3em .5em;opacity:1;transition:.5s opacity ease-in-out;position:relative}.message-container.no-scroll{height:auto;overflow-y:visible}.message-container.faded{opacity:.25}.message-container .overlay{position:absolute;top:0;left:0;right:0;bottom:0;z-index:10}:host.fixed-height .message-container{overflow-y:auto}:host-context(.mat-dark-theme) .message-container{color:#fff;background:#111111}.empty-state{text-align:center;margin:3em;color:#666}:host-context(.mat-dark-theme) .empty-state{color:#666}a.nav{position:absolute;right:.5em;z-index:10;text-align:center;opacity:0;transition:.4s opacity ease-in-out;pointer-events:none;border-radius:2em;background:#222}a.nav.visible{opacity:1;pointer-events:initial}.loading-more{padding:2em;text-align:center;margin:0 auto;width:-moz-fit-content;width:fit-content}@media (max-width: 400px){.message-container{padding:0 0 3em}}\n"]
334
- },] }
335
- ];
336
- CommentViewComponent.ctorParameters = () => [
337
- { type: ChatBackendBase }
338
- ];
339
- CommentViewComponent.propDecorators = {
340
- showEmptyState: [{ type: Input }],
341
- allowReplies: [{ type: Input }],
342
- customMenuItems: [{ type: Input }],
343
- commentsQuery: [{ type: ViewChildren, args: [CommentComponent,] }],
344
- fixedHeight: [{ type: Input }, { type: HostBinding, args: ['class.fixed-height',] }],
345
- selectedMessage: [{ type: Input }],
346
- selected: [{ type: Output }],
347
- messageEdited: [{ type: Output }],
348
- userSelected: [{ type: Output }],
349
- reported: [{ type: Output }],
350
- liked: [{ type: Output }],
351
- unliked: [{ type: Output }],
352
- usernameSelected: [{ type: Output }],
353
- avatarSelected: [{ type: Output }],
354
- shared: [{ type: Output }],
355
- deleted: [{ type: Output }],
356
- source: [{ type: Input }],
357
- genericAvatarUrl: [{ type: Input }],
358
- messageContainer: [{ type: ViewChild, args: ['messageContainer',] }],
359
- maxMessages: [{ type: Input }],
360
- maxVisibleMessages: [{ type: Input }],
361
- newestLast: [{ type: Input }],
362
- sortOrderChanged: [{ type: Output }]
363
- };
364
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWVudC12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Nkay9zcmMvbGliL2NvbW1lbnRzL2NvbW1lbnQtdmlldy9jb21tZW50LXZpZXcuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQWMsTUFBTSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDdEgsT0FBTyxFQUFxQixhQUFhLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakUsT0FBTyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRzFELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBWWhFLE1BQU0sT0FBTyxvQkFBb0I7SUFDN0IsWUFDWSxPQUF3QjtRQUF4QixZQUFPLEdBQVAsT0FBTyxDQUFpQjtRQUs1QixnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFFakMsY0FBUyxHQUFHLElBQUksT0FBTyxFQUFlLENBQUM7UUFDdkMsV0FBTSxHQUFHLElBQUksT0FBTyxFQUFlLENBQUM7UUFDcEMsYUFBUSxHQUFHLElBQUksT0FBTyxFQUFlLENBQUM7UUFDdEMsY0FBUyxHQUFHLElBQUksT0FBTyxFQUFlLENBQUM7UUFDdkMsa0JBQWEsR0FBRyxJQUFJLE9BQU8sRUFBZSxDQUFDO1FBQzNDLHNCQUFpQixHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFDeEMsb0JBQWUsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBQ3RDLFlBQU8sR0FBRyxJQUFJLE9BQU8sRUFBZSxDQUFDO1FBQ3JDLGFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBZSxDQUFDO1FBQ3RDLG1C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QkFTTixNQUFNO3VCQUNOLE1BQU07b0JBQ04sTUFBTTtzQkFDTixNQUFNOytCQUNOLE1BQU07NkJBQ04sTUFBTTtxQkFDTixNQUFNO3NCQUNOLE1BQU07cUJBTU4sS0FBSzsrQkEyRkwsS0FBSzsrQkFHTCxTQUFTLFNBQUMsa0JBQWtCOzBCQUc1QixLQUFLO2lDQUdMLEtBQUs7eUJBR0wsS0FBSzsrQkFjTCxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgVmlld0NoaWxkLCBFbGVtZW50UmVmLCBPdXRwdXQsIEhvc3RCaW5kaW5nLCBWaWV3Q2hpbGRyZW4sIFF1ZXJ5TGlzdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IFVzZXIsIENoYXRNZXNzYWdlLCBDb21tZW50c09yZGVyIH0gZnJvbSAnQGJhbnRhL2NvbW1vbic7XHJcbmltcG9ydCB7IFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBDaGF0QmFja2VuZEJhc2UgfSBmcm9tIFwiLi4vLi4vY2hhdC1iYWNrZW5kLWJhc2VcIjtcclxuaW1wb3J0IHsgQ2hhdFNvdXJjZUJhc2UgfSBmcm9tIFwiLi4vLi4vY2hhdC1zb3VyY2UtYmFzZVwiO1xyXG5pbXBvcnQgeyBNZXNzYWdlTWVudUl0ZW0gfSBmcm9tIFwiLi4vLi4vbWVzc2FnZS1tZW51LWl0ZW1cIjtcclxuaW1wb3J0IHsgQ29tbWVudENvbXBvbmVudCB9IGZyb20gXCIuLi9jb21tZW50L2NvbW1lbnQuY29tcG9uZW50XCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEVkaXRFdmVudCB7XHJcbiAgICBtZXNzYWdlOiBDaGF0TWVzc2FnZTtcclxuICAgIG5ld01lc3NhZ2U6IHN0cmluZztcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2JhbnRhLWNvbW1lbnQtdmlldycsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vY29tbWVudC12aWV3LmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2NvbW1lbnQtdmlldy5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb21tZW50Vmlld0NvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIGJhY2tlbmQ6IENoYXRCYWNrZW5kQmFzZVxyXG4gICAgKSB7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3NvdXJjZVN1YnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XHJcbiAgICBwcml2YXRlIF9zb3VyY2U6IENoYXRTb3VyY2VCYXNlO1xyXG4gICAgcHJpdmF0ZSBfc2VsZWN0ZWQgPSBuZXcgU3ViamVjdDxDaGF0TWVzc2FnZT4oKTtcclxuICAgIHByaXZhdGUgX2xpa2VkID0gbmV3IFN1YmplY3Q8Q2hhdE1lc3NhZ2U+KCk7XHJcbiAgICBwcml2YXRlIF91bmxpa2VkID0gbmV3IFN1YmplY3Q8Q2hhdE1lc3NhZ2U+KCk7XHJcbiAgICBwcml2YXRlIF9yZXBvcnRlZCA9IG5ldyBTdWJqZWN0PENoYXRNZXNzYWdlPigpO1xyXG4gICAgcHJpdmF0ZSBfdXNlclNlbGVjdGVkID0gbmV3IFN1YmplY3Q8Q2hhdE1lc3NhZ2U+KCk7XHJcbiAgICBwcml2YXRlIF91c2VybmFtZVNlbGVjdGVkID0gbmV3IFN1YmplY3Q8VXNlcj4oKTtcclxuICAgIHByaXZhdGUgX2F2YXRhclNlbGVjdGVkID0gbmV3IFN1YmplY3Q8VXNlcj4oKTtcclxuICAgIHByaXZhdGUgX3NoYXJlZCA9IG5ldyBTdWJqZWN0PENoYXRNZXNzYWdlPigpO1xyXG4gICAgcHJpdmF0ZSBfZGVsZXRlZCA9IG5ldyBTdWJqZWN0PENoYXRNZXNzYWdlPigpO1xyXG4gICAgcHJpdmF0ZSBfbWVzc2FnZUVkaXRlZCA9IG5ldyBTdWJqZWN0PEVkaXRFdmVudD4oKTtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgc2hvd0VtcHR5U3RhdGUgPSB0cnVlO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBhbGxvd1JlcGxpZXMgPSB0cnVlO1xyXG5cclxuICAgIEBJbnB1dCgpIGN1c3RvbU1lbnVJdGVtczogTWVzc2FnZU1lbnVJdGVtW10gPSBbXTtcclxuXHJcbiAgICBAVmlld0NoaWxkcmVuKENvbW1lbnRDb21wb25lbnQpXHJcbiAgICBjb21tZW50c1F1ZXJ5OiBRdWVyeUxpc3Q8Q29tbWVudENvbXBvbmVudD47XHJcblxyXG4gICAgZ2V0IGNvbW1lbnRzKCkge1xyXG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuY29tbWVudHNRdWVyeSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhpcyBtZXNzYWdlIGNhbiBiZSBmb3VuZCB3aXRoaW4gb25lIG9mIHRoZSBtZXNzYWdlIGJ1ZmZlcnMgKG9sZGVyLCBjdXJyZW50LCBuZXdlcilcclxuICAgICAqIEBwYXJhbSBtZXNzYWdlIFxyXG4gICAgICovXHJcbiAgICBpc01lc3NhZ2VMb2FkZWRJbkNvbnRleHQobWVzc2FnZTogQ2hhdE1lc3NhZ2UpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5vbGRlck1lc3NhZ2VzLmZpbmQoeCA9PiB4LmlkID09PSBtZXNzYWdlLmlkKVxyXG4gICAgICAgICAgICB8fCB0aGlzLm1lc3NhZ2VzLmZpbmQoeCA9PiB4LmlkID09PSBtZXNzYWdlLmlkKVxyXG4gICAgICAgICAgICB8fCB0aGlzLm5ld01lc3NhZ2VzLmZpbmQoeCA9PiB4LmlkID09PSBtZXNzYWdlLmlkKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBsb2FkTWVzc2FnZUluQ29udGV4dChtZXNzYWdlOiBDaGF0TWVzc2FnZSkge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuc291cmNlTG9hZGVkO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIG1lc3NhZ2UgJHttZXNzYWdlLmlkfSBpbiBjb250ZXh0Li4uYCk7XHJcbiAgICAgICAgd2hpbGUgKHRoaXMuaGFzTW9yZSAmJiAhdGhpcy5pc01lc3NhZ2VMb2FkZWRJbkNvbnRleHQobWVzc2FnZSkpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coYC4uLk5lZWQgdG8gbG9hZCBtb3JlIGNvbW1lbnRzIHRvIGZpbmQgJHttZXNzYWdlLmlkfWApO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnNob3dNb3JlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuaXNNZXNzYWdlTG9hZGVkSW5Db250ZXh0KG1lc3NhZ2UpKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEVycm9yIHdoaWxlIGxvYWRpbmcgbWVzc2FnZSBpbiBjb250ZXh0OiBGYWlsZWQgdG8gZmluZCBtZXNzYWdlICR7bWVzc2FnZS5pZH0sIG1heWJlIGl0IHdhcyBkZWxldGVkIWApO1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgcGFnZVNpemUgPSB0aGlzLm1heFZpc2libGVNZXNzYWdlcztcclxuICAgICAgICBsZXQgaXRlbXMgPSBbXS5jb25jYXQodGhpcy5vbGRlck1lc3NhZ2VzLCB0aGlzLm1lc3NhZ2VzLCB0aGlzLm5ld01lc3NhZ2VzKTtcclxuICAgICAgICBsZXQgaW5kZXggPSBpdGVtcy5maW5kSW5kZXgoeCA9PiB4LmlkID09PSBtZXNzYWdlLmlkKTtcclxuXHJcbiAgICAgICAgaWYgKGluZGV4IDwgMCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGBFcnJvciB3aGlsZSBsb2FkaW5nIG1lc3NhZ2UgaW4gY29udGV4dDogTWVzc2FnZSB3YXMgbm90IHByZXNlbnQgaW4gbWVzc2FnZSBsaXN0IWApO1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgc3RhcnRJbmRleCA9IE1hdGgubWF4KDAsIGluZGV4IC0gcGFnZVNpemUgLyAyKTsgICAgICAgIFxyXG4gICAgICAgIHRoaXMubmV3TWVzc2FnZXMgPSBpdGVtcy5zcGxpY2UoMCwgc3RhcnRJbmRleCk7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlcyA9IGl0ZW1zLnNwbGljZSgwLCBwYWdlU2l6ZSk7XHJcbiAgICAgICAgdGhpcy5vbGRlck1lc3NhZ2VzID0gaXRlbXM7XHJcbiAgICAgICAgdGhpcy5pc1ZpZXdpbmdNb3JlID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCB0aGUgQ29tbWVudENvbXBvbmVudCBpbnN0YW50aWF0ZWQgZm9yIHRoZSBnaXZlbiBDaGF0TWVzc2FnZSxcclxuICAgICAqIGlmIGl0IGV4aXN0cyBpbiB0aGUgY3VycmVudCB2aWV3LiBOb3RlIHRoYXQgbWVzc2FnZXMgd2hpY2ggYXJlIG5vdCBcclxuICAgICAqIGN1cnJlbnRseSBzaG93biB0byB0aGUgdXNlciB3aWxsIG5vdCByZXR1cm4gYSBDb21tZW50Q29tcG9uZW50LlxyXG4gICAgICogQHBhcmFtIG1lc3NhZ2UgXHJcbiAgICAgKiBAcmV0dXJucyBcclxuICAgICAqL1xyXG4gICAgZ2V0Q29tbWVudENvbXBvbmVudEZvck1lc3NhZ2UobWVzc2FnZTogQ2hhdE1lc3NhZ2UpIHtcclxuICAgICAgICBpZiAoIW1lc3NhZ2UpXHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgWW91IG11c3QgcGFzcyBhIHZhbGlkIENoYXRNZXNzYWdlYCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY29tbWVudHMuZmluZCh4ID0+IHgubWVzc2FnZT8uaWQgPT09IG1lc3NhZ2UuaWQpO1xyXG4gICAgfVxyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZpeGVkLWhlaWdodCcpXHJcbiAgICBmaXhlZEhlaWdodDogYm9vbGVhbjtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgc2VsZWN0ZWRNZXNzYWdlOiBDaGF0TWVzc2FnZTtcclxuICAgIFxyXG4gICAgQE91dHB1dCgpXHJcbiAgICBnZXQgc2VsZWN0ZWQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkO1xyXG4gICAgfVxyXG5cclxuICAgIEBPdXRwdXQoKSBcclxuICAgIGdldCBtZXNzYWdlRWRpdGVkKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9tZXNzYWdlRWRpdGVkLmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNhdmVFZGl0KG1lc3NhZ2U6IENoYXRNZXNzYWdlLCBuZXdNZXNzYWdlOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLl9tZXNzYWdlRWRpdGVkLm5leHQoeyBtZXNzYWdlLCBuZXdNZXNzYWdlIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIEBPdXRwdXQoKSBnZXQgdXNlclNlbGVjdGVkKCkgeyByZXR1cm4gdGhpcy5fdXNlclNlbGVjdGVkOyB9XHJcbiAgICBAT3V0cHV0KCkgZ2V0IHJlcG9ydGVkKCkgeyByZXR1cm4gdGhpcy5fcmVwb3J0ZWQ7IH1cclxuICAgIEBPdXRwdXQoKSBnZXQgbGlrZWQoKSB7IHJldHVybiB0aGlzLl9saWtlZDsgfVxyXG4gICAgQE91dHB1dCgpIGdldCB1bmxpa2VkKCkgeyByZXR1cm4gdGhpcy5fdW5saWtlZDsgfVxyXG4gICAgQE91dHB1dCgpIGdldCB1c2VybmFtZVNlbGVjdGVkKCkgeyByZXR1cm4gdGhpcy5fdXNlcm5hbWVTZWxlY3RlZDsgfVxyXG4gICAgQE91dHB1dCgpIGdldCBhdmF0YXJTZWxlY3RlZCgpIHsgcmV0dXJuIHRoaXMuX2F2YXRhclNlbGVjdGVkOyB9XHJcbiAgICBAT3V0cHV0KCkgZ2V0IHNoYXJlZCgpIHsgcmV0dXJuIHRoaXMuX3NoYXJlZDsgfVxyXG4gICAgQE91dHB1dCgpIGdldCBkZWxldGVkKCkgeyByZXR1cm4gdGhpcy5fZGVsZXRlZDsgfVxyXG5cclxuICAgIG1lbnVNZXNzYWdlOiBDaGF0TWVzc2FnZSA9IG51bGw7XHJcbiAgICBtZXNzYWdlczogQ2hhdE1lc3NhZ2VbXSA9IFtdO1xyXG4gICAgY3VycmVudFVzZXI6IFVzZXI7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIGdldCBzb3VyY2UoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NvdXJjZTtcclxuICAgIH1cclxuXHJcbiAgICBsaWtlTWVzc2FnZShtZXNzYWdlOiBDaGF0TWVzc2FnZSkge1xyXG4gICAgICAgIHRoaXMuX2xpa2VkLm5leHQobWVzc2FnZSk7XHJcbiAgICB9XHJcblxyXG4gICAgdW5saWtlTWVzc2FnZShtZXNzYWdlOiBDaGF0TWVzc2FnZSkge1xyXG4gICAgICAgIHRoaXMuX3VubGlrZWQubmV4dChtZXNzYWdlKTtcclxuICAgIH1cclxuXHJcbiAgICByZXBvcnRNZXNzYWdlKG1lc3NhZ2U6IENoYXRNZXNzYWdlKSB7XHJcbiAgICAgICAgdGhpcy5fcmVwb3J0ZWQubmV4dChtZXNzYWdlKTtcclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RNZXNzYWdlKG1lc3NhZ2U6IENoYXRNZXNzYWdlKSB7XHJcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWQubmV4dChtZXNzYWdlKTtcclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RNZXNzYWdlVXNlcihtZXNzYWdlOiBDaGF0TWVzc2FnZSkge1xyXG4gICAgICAgIHRoaXMuX3VzZXJTZWxlY3RlZC5uZXh0KG1lc3NhZ2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHNlbGVjdFVzZXJuYW1lKHVzZXI6IFVzZXIpIHtcclxuICAgICAgICB0aGlzLl91c2VybmFtZVNlbGVjdGVkLm5leHQodXNlcik7XHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0QXZhdGFyKHVzZXI6IFVzZXIpIHtcclxuICAgICAgICB0aGlzLl9hdmF0YXJTZWxlY3RlZC5uZXh0KHVzZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIHNoYXJlZE1lc3NhZ2UobWVzc2FnZTogQ2hhdE1lc3NhZ2UpIHtcclxuICAgICAgICB0aGlzLl9zaGFyZWQubmV4dChtZXNzYWdlKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGFydEVkaXRpbmcobWVzc2FnZTogQ2hhdE1lc3NhZ2UpIHtcclxuICAgICAgICB0aGlzLm1lc3NhZ2VzLmZvckVhY2gobSA9PiBtLnRyYW5zaWVudFN0YXRlLmVkaXRpbmcgPSBmYWxzZSk7XHJcbiAgICAgICAgbWVzc2FnZS50cmFuc2llbnRTdGF0ZS5lZGl0aW5nID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBkZWxldGVNZXNzYWdlKG1lc3NhZ2U6IENoYXRNZXNzYWdlKSB7XHJcbiAgICAgICAgdGhpcy5fZGVsZXRlZC5uZXh0KG1lc3NhZ2UpO1xyXG4gICAgfVxyXG5cclxuICAgIGN1c3RvbVNvcnRFbmFibGVkID0gZmFsc2U7XHJcblxyXG4gICAgbWFya1NvdXJjZUxvYWRlZDogKCkgPT4gdm9pZDtcclxuICAgIHNvdXJjZUxvYWRlZCA9IG5ldyBQcm9taXNlPHZvaWQ+KHIgPT4gdGhpcy5tYXJrU291cmNlTG9hZGVkID0gcik7XHJcblxyXG4gICAgc2V0IHNvdXJjZSh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuY3VzdG9tU29ydEVuYWJsZWQgPSB2YWx1ZT8uc29ydE9yZGVyICE9PSBDb21tZW50c09yZGVyLk5FV0VTVDtcclxuICAgICAgICB0aGlzLm5ld01lc3NhZ2VzID0gW107XHJcbiAgICAgICAgdGhpcy5vbGRlck1lc3NhZ2VzID0gW107XHJcblxyXG4gICAgICAgICh3aW5kb3cgYXMgYW55KS5iYW50YVNvdXJjZURlYnVnID0gdmFsdWU7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9zb3VyY2VTdWJzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3NvdXJjZVN1YnMudW5zdWJzY3JpYmUoKTtcclxuICAgICAgICAgICAgdGhpcy5fc291cmNlU3VicyA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3NvdXJjZSA9IHZhbHVlO1xyXG5cclxuICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgICAgY29uc3QgbWVzc2FnZXMgPSAodmFsdWUubWVzc2FnZXMgfHwgW10pLnNsaWNlKCk7XHJcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZXMgPSBtZXNzYWdlcztcclxuICAgICAgICAgICAgdGhpcy5vbGRlck1lc3NhZ2VzID0gbWVzc2FnZXMuc3BsaWNlKHRoaXMubWF4VmlzaWJsZU1lc3NhZ2VzLCBtZXNzYWdlcy5sZW5ndGgpO1xyXG4gICAgICAgICAgICB0aGlzLmhhc01vcmUgPSB0cnVlOyAvL3RoaXMub2xkZXJNZXNzYWdlcy5sZW5ndGggPiAwO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fc291cmNlU3VicyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcclxuICAgICAgICAgICAgdGhpcy5fc291cmNlU3Vicy5hZGQodGhpcy5fc291cmNlLm1lc3NhZ2VSZWNlaXZlZC5zdWJzY3JpYmUobXNnID0+IHRoaXMubWVzc2FnZVJlY2VpdmVkKG1zZykpKTtcclxuICAgICAgICAgICAgdGhpcy5fc291cmNlU3Vicy5hZGQodGhpcy5fc291cmNlLm1lc3NhZ2VTZW50LnN1YnNjcmliZShtc2cgPT4gdGhpcy5tZXNzYWdlU2VudChtc2cpKSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9zb3VyY2VTdWJzLmFkZChcclxuICAgICAgICAgICAgICAgIHRoaXMuYmFja2VuZC51c2VyQ2hhbmdlZC5zdWJzY3JpYmUodXNlciA9PiB0aGlzLmN1cnJlbnRVc2VyID0gdXNlcilcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZ2V0SW5pdGlhbE1lc3NhZ2VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgZ2V0SW5pdGlhbE1lc3NhZ2VzKCkge1xyXG4gICAgICAgIGxldCBtZXNzYWdlcyA9IChhd2FpdCB0aGlzLl9zb3VyY2UuZ2V0RXhpc3RpbmdNZXNzYWdlcygpKTtcclxuICAgICAgICBtZXNzYWdlcy5mb3JFYWNoKG0gPT4gbS50cmFuc2llbnRTdGF0ZSA/Pz0ge30pO1xyXG4gICAgICAgIHRoaXMubWVzc2FnZXMgPSB0aGlzLm5ld2VzdExhc3QgPyBtZXNzYWdlcy5zbGljZSgpLnJldmVyc2UoKSA6IG1lc3NhZ2VzO1xyXG4gICAgICAgIHRoaXMuc29ydE1lc3NhZ2VzKCk7XHJcbiAgICAgICAgaWYgKHRoaXMubWFya1NvdXJjZUxvYWRlZClcclxuICAgICAgICAgICAgdGhpcy5tYXJrU291cmNlTG9hZGVkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIGdlbmVyaWNBdmF0YXJVcmw6IHN0cmluZztcclxuXHJcbiAgICBAVmlld0NoaWxkKCdtZXNzYWdlQ29udGFpbmVyJylcclxuICAgIG1lc3NhZ2VDb250YWluZXI6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBtYXhNZXNzYWdlcyA9IDIwMDA7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIG1heFZpc2libGVNZXNzYWdlczogbnVtYmVyID0gMjAwO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBuZXdlc3RMYXN0ID0gZmFsc2U7XHJcblxyXG4gICAgaXNWaWV3aW5nTW9yZSA9IGZhbHNlO1xyXG4gICAgaXNMb2FkaW5nTW9yZSA9IGZhbHNlO1xyXG4gICAgaGFzTW9yZSA9IGZhbHNlO1xyXG5cclxuICAgIG5ld01lc3NhZ2VzOiBDaGF0TWVzc2FnZVtdID0gW107XHJcbiAgICBvbGRlck1lc3NhZ2VzOiBDaGF0TWVzc2FnZVtdID0gW107XHJcblxyXG4gICAgbWVzc2FnZUlkZW50aXR5KGluZGV4OiBudW1iZXIsIGNoYXRNZXNzYWdlOiBDaGF0TWVzc2FnZSkge1xyXG4gICAgICAgIHJldHVybiBjaGF0TWVzc2FnZS5pZDtcclxuICAgIH1cclxuXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHNvcnRPcmRlckNoYW5nZWQgPSBuZXcgU3ViamVjdDxDb21tZW50c09yZGVyPigpO1xyXG5cclxuICAgIGFzeW5jIHNob3dOZXcoKSB7XHJcbiAgICAgICAgbGV0IG5hdHVyYWxPcmRlciA9IENvbW1lbnRzT3JkZXIuTkVXRVNUO1xyXG4gICAgICAgIGlmICh0aGlzLnNvdXJjZSAmJiB0aGlzLnNvdXJjZS5zb3J0T3JkZXIgIT09IG5hdHVyYWxPcmRlcikge1xyXG4gICAgICAgICAgICB0aGlzLnNvcnRPcmRlckNoYW5nZWQubmV4dChuYXR1cmFsT3JkZXIpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzVmlld2luZ01vcmUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMubmV3ZXN0TGFzdClcclxuICAgICAgICAgICAgdGhpcy5tZXNzYWdlcyA9IHRoaXMubWVzc2FnZXMuY29uY2F0KHRoaXMubmV3TWVzc2FnZXMuc3BsaWNlKDAsIHRoaXMubmV3TWVzc2FnZXMubGVuZ3RoKSk7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2VzID0gdGhpcy5uZXdNZXNzYWdlcy5zcGxpY2UoMCwgdGhpcy5uZXdNZXNzYWdlcy5sZW5ndGgpLmNvbmNhdCh0aGlzLm1lc3NhZ2VzKTtcclxuICAgICAgICBsZXQgb3ZlcmZsb3cgPSB0aGlzLm1lc3NhZ2VzLnNwbGljZSh0aGlzLm1heFZpc2libGVNZXNzYWdlcywgdGhpcy5tZXNzYWdlcy5sZW5ndGgpO1xyXG4gICAgICAgIHRoaXMub2xkZXJNZXNzYWdlcyA9IG92ZXJmbG93LmNvbmNhdCh0aGlzLm9sZGVyTWVzc2FnZXMpO1xyXG4gICAgICAgIHRoaXMub2xkZXJNZXNzYWdlcy5zcGxpY2UodGhpcy5tYXhNZXNzYWdlcyAtIHRoaXMubWF4VmlzaWJsZU1lc3NhZ2VzLCB0aGlzLm9sZGVyTWVzc2FnZXMubGVuZ3RoKTtcclxuICAgICAgICB0aGlzLmhhc01vcmUgPSB0aGlzLm9sZGVyTWVzc2FnZXMubGVuZ3RoID4gMDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBzaG93TW9yZSgpIHtcclxuICAgICAgICB0aGlzLmlzVmlld2luZ01vcmUgPSB0cnVlO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5vbGRlck1lc3NhZ2VzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmdNb3JlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZXMgPSB0aGlzLm1lc3NhZ2VzLmNvbmNhdCh0aGlzLm9sZGVyTWVzc2FnZXMuc3BsaWNlKDAsIDUwKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaXNMb2FkaW5nTW9yZSA9IHRydWU7XHJcblxyXG4gICAgICAgIGxldCBuZXh0UGFnZVNpemUgPSAyMDtcclxuICAgICAgICBsZXQgbGFzdE1lc3NhZ2U6IENoYXRNZXNzYWdlO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5uZXdlc3RMYXN0KSB7XHJcbiAgICAgICAgICAgIGxhc3RNZXNzYWdlID0gdGhpcy5vbGRlck1lc3NhZ2VzWzBdID8/IHRoaXMubWVzc2FnZXNbMF07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbGFzdE1lc3NhZ2UgPSB0aGlzLm9sZGVyTWVzc2FnZXNbdGhpcy5vbGRlck1lc3NhZ2VzLmxlbmd0aCAtIDFdID8/IHRoaXMubWVzc2FnZXNbdGhpcy5tZXNzYWdlcy5sZW5ndGggLSAxXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghbGFzdE1lc3NhZ2UpIHtcclxuICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmdNb3JlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuaGFzTW9yZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgbWVzc2FnZXMgPSBhd2FpdCB0aGlzLnNvdXJjZS5sb2FkQWZ0ZXIobGFzdE1lc3NhZ2UsIG5leHRQYWdlU2l6ZSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLm5ld2VzdExhc3QpXHJcbiAgICAgICAgICAgIG1lc3NhZ2VzID0gbWVzc2FnZXMuc2xpY2UoKS5yZXZlcnNlKCk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgbWVzc2FnZXMuZm9yRWFjaChtID0+IG0udHJhbnNpZW50U3RhdGUgPz89IHt9KTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMubmV3ZXN0TGFzdClcclxuICAgICAgICAgICAgdGhpcy5tZXNzYWdlcyA9IG1lc3NhZ2VzLmNvbmNhdCh0aGlzLm1lc3NhZ2VzKTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZXMgPSB0aGlzLm1lc3NhZ2VzLmNvbmNhdChtZXNzYWdlcyk7XHJcbiAgICAgICAgdGhpcy5pc0xvYWRpbmdNb3JlID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKG1lc3NhZ2VzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgUmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBsaXN0LmApO1xyXG4gICAgICAgICAgICB0aGlzLmhhc01vcmUgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhZGRNZXNzYWdlKG1lc3NhZ2U6IENoYXRNZXNzYWdlKSB7XHJcblxyXG4gICAgICAgIGlmICghbWVzc2FnZS50cmFuc2llbnRTdGF0ZSlcclxuICAgICAgICAgICAgbWVzc2FnZS50cmFuc2llbnRTdGF0ZSA/Pz0ge307XHJcbiAgICAgICAgXHJcbiAgICAgICAgbGV0IGRlc3RpbmF0aW9uID0gdGhpcy5tZXNzYWdlcztcclxuICAgICAgICBsZXQgYnVja2V0ID0gdGhpcy5vbGRlck1lc3NhZ2VzO1xyXG4gICAgICAgIGxldCBuZXdlc3RMYXN0ID0gdGhpcy5uZXdlc3RMYXN0O1xyXG5cclxuICAgICAgICBpZiAodGhpcy5pc1ZpZXdpbmdNb3JlKSB7XHJcbiAgICAgICAgICAgIGRlc3RpbmF0aW9uID0gdGhpcy5uZXdNZXNzYWdlcztcclxuICAgICAgICAgICAgYnVja2V0ID0gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFxyXG4gICAgICAgIGlmIChuZXdlc3RMYXN0KSB7XHJcbiAgICAgICAgICAgIGRlc3RpbmF0aW9uLnB1c2gobWVzc2FnZSk7XHJcbiAgICAgICAgICAgIGxldCBvdmVyZmxvdyA9IGRlc3RpbmF0aW9uLnNwbGljZSh0aGlzLm1heFZpc2libGVNZXNzYWdlcywgZGVzdGluYXRpb24ubGVuZ3RoKTtcclxuICAgICAgICAgICAgYnVja2V0Py5wdXNoKC4uLm92ZXJmbG93KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBkZXN0aW5hdGlvbi51bnNoaWZ0KG1lc3NhZ2UpO1xyXG4gICAgICAgICAgICBsZXQgb3ZlcmZsb3cgPSBkZXN0aW5hdGlvbi5zcGxpY2UodGhpcy5tYXhWaXNpYmxlTWVzc2FnZXMsIGRlc3RpbmF0aW9uLmxlbmd0aCk7XHJcbiAgICAgICAgICAgIGJ1Y2tldD8udW5zaGlmdCguLi5vdmVyZmxvdyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoYnVja2V0Py5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgICB0aGlzLmhhc01vcmUgPSB0cnVlO1xyXG5cclxuICAgICAgICBtZXNzYWdlLnBhZ2luZ0N1cnNvciA9IFN0cmluZyh0aGlzLmluY3JlbWVudFBhZ2luZ0N1cnNvcnMoKSk7XHJcbiAgICAgICAgdGhpcy5zb3J0TWVzc2FnZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGluY3JlbWVudFBhZ2luZ0N1cnNvcnMoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc291cmNlLnNvcnRPcmRlciAhPT0gQ29tbWVudHNPcmRlci5ORVdFU1QpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBcclxuICAgICAgICBsZXQgbWF4UGFnaW5nQ3Vyc29yID0gMDtcclxuICAgICAgICBmb3IgKGxldCBncm91cCBvZiBbdGhpcy5tZXNzYWdlcywgdGhpcy5vbGRlck1lc3NhZ2VzLCB0aGlzLm5ld01lc3NhZ2VzXSkge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBtZXNzYWdlIG9mIGdyb3VwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5wYWdpbmdDdXJzb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcGFnaW5nQ3Vyc29yID0gTnVtYmVyKG1lc3NhZ2UucGFnaW5nQ3Vyc29yKSArIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhZ2luZ0N1cnNvciA+IG1heFBhZ2luZ0N1cnNvcilcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4UGFnaW5nQ3Vyc29yID0gcGFnaW5nQ3Vyc29yO1xyXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UucGFnaW5nQ3Vyc29yID0gU3RyaW5nKHBhZ2luZ0N1cnNvcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBtYXhQYWdpbmdDdXJzb3I7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBXYWl0IGZvciBhbGwgY3VycmVudGx5IHZpc2libGUgY29tbWVudHMgdG8gYmUgZnVsbHkgbG9hZGVkLCBpbmNsdWRpbmcgYWxsIGF0dGFjaG1lbnRzLlxyXG4gICAgICogRG9pbmcgdGhpcyB3aWxsIHByZXZlbnQgbGF5b3V0IHNoaWZ0IHdoZW4gc2Nyb2xsaW5nIHRvIGEgc3BlY2lmaWMgY29tbWVudC5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgd2FpdEZvckFsbENvbW1lbnRzVG9Mb2FkKCkge1xyXG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHIgPT4gc2V0VGltZW91dChyLCAxMDApKTtcclxuICAgICAgICBhd2FpdCB0aGlzLnNvdXJjZUxvYWRlZDtcclxuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbCh0aGlzLmNvbW1lbnRzLm1hcCh4ID0+IHgud2FpdEZvckxvYWQoKSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc29ydE1lc3NhZ2VzKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5zb3VyY2UpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBcclxuICAgICAgICBsZXQgc29ydGVyOiAoYTogQ2hhdE1lc3NhZ2UsIGI6IENoYXRNZXNzYWdlKSA9PiBudW1iZXI7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnNvdXJjZS5zb3J0T3JkZXIgPT09IENvbW1lbnRzT3JkZXIuTElLRVMpXHJcbiAgICAgICAgICAgIHNvcnRlciA9IChhLCBiKSA9PiBiLmxpa2VzIC0gYS5saWtlcztcclxuICAgICAgICBlbHNlIGlmICh0aGlzLnNvdXJjZS5zb3J0T3JkZXIgPT09IENvbW1lbnRzT3JkZXIuTkVXRVNUKVxyXG4gICAgICAgICAgICBzb3J0ZXIgPSAoYSwgYikgPT4gKGIuc2VudEF0IC0gYS5zZW50QXQpICogKHRoaXMubmV3ZXN0TGFzdCA/IC0xIDogMSk7XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5zb3VyY2Uuc29ydE9yZGVyID09PSBDb21tZW50c09yZGVyLk9MREVTVClcclxuICAgICAgICAgICAgc29ydGVyID0gKGEsIGIpID0+IChhLnNlbnRBdCAtIGIuc2VudEF0KSAqICh0aGlzLm5ld2VzdExhc3QgPyAtMSA6IDEpO1xyXG5cclxuICAgICAgICB0aGlzLm1lc3NhZ2VzLnNvcnQoc29ydGVyKTtcclxuICAgICAgICB0aGlzLm9sZGVyTWVzc2FnZXMuc29ydChzb3J0ZXIpO1xyXG4gICAgICAgIHRoaXMubmV3TWVzc2FnZXMuc29ydChzb3J0ZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbWVzc2FnZVJlY2VpdmVkKG1lc3NhZ2U6IENoYXRNZXNzYWdlKSB7XHJcbiAgICAgICAgdGhpcy5hZGRNZXNzYWdlKG1lc3NhZ2UpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5pc1Njcm9sbGVkVG9MYXRlc3QoKSlcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnNjcm9sbFRvTGF0ZXN0KCkpO1xyXG4gICAgfVxyXG5cclxuICAgIGlzU2Nyb2xsZWRUb0xhdGVzdCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMubWVzc2FnZUNvbnRhaW5lcilcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICBjb25zdCBlbCA9IHRoaXMubWVzc2FnZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50O1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRTY3JvbGwgPSBlbC5zY3JvbGxUb3A7XHJcbiAgICAgICAgY29uc3QgY3VycmVudFRvdGFsID0gZWwuc2Nyb2xsSGVpZ2h0IC0gZWwub2Zmc2V0SGVpZ2h0O1xyXG5cclxuICAgICAgICByZXR1cm4gY3VycmVudFNjcm9sbCA+IGN1cnJlbnRUb3RhbCAtIDEwO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbWVzc2FnZVNlbnQobWVzc2FnZTogQ2hhdE1lc3NhZ2UpIHtcclxuICAgICAgICB0aGlzLmFkZE1lc3NhZ2UobWVzc2FnZSk7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5tZXNzYWdlQ29udGFpbmVyKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIHRoaXMuc2Nyb2xsVG9MYXRlc3QoKTtcclxuICAgIH1cclxuXHJcbiAgICBzY3JvbGxUb0xhdGVzdCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMubWVzc2FnZUNvbnRhaW5lcilcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICBjb25zdCBlbCA9IHRoaXMubWVzc2FnZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50O1xyXG4gICAgICAgIGVsLnNjcm9sbFRvcCA9IGVsLnNjcm9sbEhlaWdodDtcclxuICAgIH1cclxuXHJcbiAgICBtZW50aW9uc01lKG1lc3NhZ2U6IENoYXRNZXNzYWdlKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmN1cnJlbnRVc2VyKVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmIChtZXNzYWdlLm1lc3NhZ2UuaW5jbHVkZXMoYEAke3RoaXMuY3VycmVudFVzZXIudXNlcm5hbWV9YCkpXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbn1cclxuIl19
@@ -1,62 +0,0 @@
1
- import { NgModule } from '@angular/core';
2
- import { CommentComponent } from './comment/comment.component';
3
- import { CommentViewComponent } from './comment-view/comment-view.component';
4
- import { BantaCommentsComponent } from './banta-comments/banta-comments.component';
5
- import { CommonModule } from '@angular/common';
6
- import { FormsModule } from '@angular/forms';
7
- import { BantaCommonModule } from '../common';
8
- import { LiveCommentComponent } from './live-comment.component';
9
- import { EmojiModule } from '../emoji';
10
- import { MatIconModule } from '@angular/material/icon';
11
- import { MatButtonModule } from '@angular/material/button';
12
- import { MatMenuModule } from '@angular/material/menu';
13
- import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
14
- import { MatFormFieldModule } from '@angular/material/form-field';
15
- import { MatInputModule } from '@angular/material/input';
16
- import { TextFieldModule } from '@angular/cdk/text-field';
17
- import { CommentFieldComponent } from './comment-field/comment-field.component';
18
- import { MatTooltipModule } from '@angular/material/tooltip';
19
- import { CommentSortComponent } from "./comment-sort/comment-sort.component";
20
- import { MatSelectModule } from "@angular/material/select";
21
- import { AttachmentButtonComponent } from './attachment-button/attachment-button.component';
22
- import { BantaReplySendOptionsDirective } from './reply-send-options.directive';
23
- import { OverlayModule } from '@angular/cdk/overlay';
24
- import { PortalModule } from '@angular/cdk/portal';
25
- import { AttachmentScraperDirective } from './attachment-scraper.directive';
26
- const COMPONENTS = [
27
- CommentComponent,
28
- CommentViewComponent,
29
- BantaCommentsComponent,
30
- LiveCommentComponent,
31
- CommentFieldComponent,
32
- CommentSortComponent,
33
- AttachmentButtonComponent,
34
- BantaReplySendOptionsDirective,
35
- AttachmentScraperDirective
36
- ];
37
- export class CommentsModule {
38
- }
39
- CommentsModule.decorators = [
40
- { type: NgModule, args: [{
41
- declarations: COMPONENTS,
42
- imports: [
43
- CommonModule,
44
- TextFieldModule,
45
- FormsModule,
46
- MatIconModule,
47
- MatFormFieldModule,
48
- MatInputModule,
49
- MatButtonModule,
50
- MatMenuModule,
51
- MatProgressSpinnerModule,
52
- BantaCommonModule,
53
- EmojiModule,
54
- MatTooltipModule,
55
- MatSelectModule,
56
- OverlayModule,
57
- PortalModule
58
- ],
59
- exports: COMPONENTS
60
- },] }
61
- ];
62
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWVudHMubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2RrL3NyYy9saWIvY29tbWVudHMvY29tbWVudHMubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDL0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDN0UsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDbkYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDOUMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN2QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzFELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ2hGLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQzNELE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLHVDQUF1QyxDQUFDO0FBQzNFLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUM1RixPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNoRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDckQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ25ELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRTVFLE1BQU0sVUFBVSxHQUFHO0lBQ2YsZ0JBQWdCO0lBQ2hCLG9CQUFvQjtJQUNwQixzQkFBc0I7SUFDdEIsb0JBQW9CO0lBQ3BCLHFCQUFxQjtJQUNyQixvQkFBb0I7SUFDcEIseUJBQXlCO0lBQ3pCLDhCQUE4QjtJQUM5QiwwQkFBMEI7Q0FDN0IsQ0FBQztBQXVCRixNQUFNLE9BQU8sY0FBYzs7O1lBckIxQixRQUFRLFNBQUM7Z0JBQ04sWUFBWSxFQUFFLFVBQVU7Z0JBQzFCLE9BQU8sRUFBRTtvQkFDUCxZQUFZO29CQUNaLGVBQWU7b0JBQ2YsV0FBVztvQkFDWCxhQUFhO29CQUNiLGtCQUFrQjtvQkFDbEIsY0FBYztvQkFDZCxlQUFlO29CQUNmLGFBQWE7b0JBQ2Isd0JBQXdCO29CQUN4QixpQkFBaUI7b0JBQ2pCLFdBQVc7b0JBQ1gsZ0JBQWdCO29CQUNoQixlQUFlO29CQUNmLGFBQWE7b0JBQ2IsWUFBWTtpQkFDYjtnQkFDQyxPQUFPLEVBQUUsVUFBVTthQUN0QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbW1lbnRDb21wb25lbnQgfSBmcm9tICcuL2NvbW1lbnQvY29tbWVudC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDb21tZW50Vmlld0NvbXBvbmVudCB9IGZyb20gJy4vY29tbWVudC12aWV3L2NvbW1lbnQtdmlldy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBCYW50YUNvbW1lbnRzQ29tcG9uZW50IH0gZnJvbSAnLi9iYW50YS1jb21tZW50cy9iYW50YS1jb21tZW50cy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQmFudGFDb21tb25Nb2R1bGUgfSBmcm9tICcuLi9jb21tb24nO1xyXG5pbXBvcnQgeyBMaXZlQ29tbWVudENvbXBvbmVudCB9IGZyb20gJy4vbGl2ZS1jb21tZW50LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEVtb2ppTW9kdWxlIH0gZnJvbSAnLi4vZW1vamknO1xyXG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XHJcbmltcG9ydCB7IE1hdE1lbnVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9tZW51JztcclxuaW1wb3J0IHsgTWF0UHJvZ3Jlc3NTcGlubmVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcHJvZ3Jlc3Mtc3Bpbm5lcic7XHJcbmltcG9ydCB7IE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xyXG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcclxuaW1wb3J0IHsgVGV4dEZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3RleHQtZmllbGQnO1xyXG5pbXBvcnQgeyBDb21tZW50RmllbGRDb21wb25lbnQgfSBmcm9tICcuL2NvbW1lbnQtZmllbGQvY29tbWVudC1maWVsZC5jb21wb25lbnQnO1xyXG5pbXBvcnQge01hdFRvb2x0aXBNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xyXG5pbXBvcnQge0NvbW1lbnRTb3J0Q29tcG9uZW50fSBmcm9tIFwiLi9jb21tZW50LXNvcnQvY29tbWVudC1zb3J0LmNvbXBvbmVudFwiO1xyXG5pbXBvcnQge01hdFNlbGVjdE1vZHVsZX0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL3NlbGVjdFwiO1xyXG5pbXBvcnQgeyBBdHRhY2htZW50QnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi9hdHRhY2htZW50LWJ1dHRvbi9hdHRhY2htZW50LWJ1dHRvbi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBCYW50YVJlcGx5U2VuZE9wdGlvbnNEaXJlY3RpdmUgfSBmcm9tICcuL3JlcGx5LXNlbmQtb3B0aW9ucy5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBPdmVybGF5TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xyXG5pbXBvcnQgeyBQb3J0YWxNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcclxuaW1wb3J0IHsgQXR0YWNobWVudFNjcmFwZXJEaXJlY3RpdmUgfSBmcm9tICcuL2F0dGFjaG1lbnQtc2NyYXBlci5kaXJlY3RpdmUnO1xyXG5cclxuY29uc3QgQ09NUE9ORU5UUyA9IFtcclxuICAgIENvbW1lbnRDb21wb25lbnQsXHJcbiAgICBDb21tZW50Vmlld0NvbXBvbmVudCxcclxuICAgIEJhbnRhQ29tbWVudHNDb21wb25lbnQsXHJcbiAgICBMaXZlQ29tbWVudENvbXBvbmVudCxcclxuICAgIENvbW1lbnRGaWVsZENvbXBvbmVudCxcclxuICAgIENvbW1lbnRTb3J0Q29tcG9uZW50LFxyXG4gICAgQXR0YWNobWVudEJ1dHRvbkNvbXBvbmVudCxcclxuICAgIEJhbnRhUmVwbHlTZW5kT3B0aW9uc0RpcmVjdGl2ZSxcclxuICAgIEF0dGFjaG1lbnRTY3JhcGVyRGlyZWN0aXZlXHJcbl07XHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gICAgZGVjbGFyYXRpb25zOiBDT01QT05FTlRTLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIFRleHRGaWVsZE1vZHVsZSxcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgTWF0SWNvbk1vZHVsZSxcclxuICAgIE1hdEZvcm1GaWVsZE1vZHVsZSxcclxuICAgIE1hdElucHV0TW9kdWxlLFxyXG4gICAgTWF0QnV0dG9uTW9kdWxlLFxyXG4gICAgTWF0TWVudU1vZHVsZSxcclxuICAgIE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZSxcclxuICAgIEJhbnRhQ29tbW9uTW9kdWxlLFxyXG4gICAgRW1vamlNb2R1bGUsXHJcbiAgICBNYXRUb29sdGlwTW9kdWxlLFxyXG4gICAgTWF0U2VsZWN0TW9kdWxlLFxyXG4gICAgT3ZlcmxheU1vZHVsZSxcclxuICAgIFBvcnRhbE1vZHVsZVxyXG4gIF0sXHJcbiAgICBleHBvcnRzOiBDT01QT05FTlRTXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb21tZW50c01vZHVsZSB7XHJcbn1cclxuIl19
@@ -1,71 +0,0 @@
1
- import { Component, Input, Output } from '@angular/core';
2
- import { Subject } from 'rxjs';
3
- import { ChatBackendBase } from '../chat-backend-base';
4
- export class LiveCommentComponent {
5
- constructor(backend) {
6
- this.backend = backend;
7
- this._upvoted = new Subject();
8
- this._reported = new Subject();
9
- this._selected = new Subject();
10
- }
11
- get upvoted() {
12
- return this._upvoted;
13
- }
14
- get reported() {
15
- return this._reported;
16
- }
17
- get selected() {
18
- return this._selected;
19
- }
20
- get message() {
21
- return this._message;
22
- }
23
- set message(value) {
24
- let originalId = null;
25
- if (this._message)
26
- originalId = this._message.id;
27
- this._message = value;
28
- if (value && originalId === value.id) {
29
- return;
30
- }
31
- if (this.unsubscribe)
32
- this.unsubscribe();
33
- if (value) {
34
- this.unsubscribe = this.backend.watchMessage(value, message => this.message = message);
35
- }
36
- }
37
- report() {
38
- this._reported.next();
39
- }
40
- upvote() {
41
- this._upvoted.next();
42
- }
43
- select() {
44
- this._selected.next();
45
- }
46
- }
47
- LiveCommentComponent.decorators = [
48
- { type: Component, args: [{
49
- selector: 'banta-live-comment',
50
- template: `
51
- <banta-comment
52
- *ngIf="message"
53
- [message]="message"
54
- (upvoted)="upvote()"
55
- (reported)="report()"
56
- (selected)="select()"
57
- ></banta-comment>
58
- `,
59
- styles: [``]
60
- },] }
61
- ];
62
- LiveCommentComponent.ctorParameters = () => [
63
- { type: ChatBackendBase }
64
- ];
65
- LiveCommentComponent.propDecorators = {
66
- upvoted: [{ type: Output }],
67
- reported: [{ type: Output }],
68
- selected: [{ type: Output }],
69
- message: [{ type: Input }]
70
- };
71
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGl2ZS1jb21tZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Nkay9zcmMvbGliL2NvbW1lbnRzL2xpdmUtY29tbWVudC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpELE9BQU8sRUFBRSxPQUFPLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDM0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBZXZELE1BQU0sT0FBTyxvQkFBb0I7SUFDN0IsWUFDWSxPQUF5QjtRQUF6QixZQUFPLEdBQVAsT0FBTyxDQUFrQjtRQU03QixhQUFRLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUMvQixjQUFTLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUNoQyxjQUFTLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQUx4QyxDQUFDO0lBT0QsSUFDSSxPQUFPO1FBQ1AsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxJQUNJLFFBQVE7UUFDUixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQ0ksUUFBUTtRQUNSLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFDSSxPQUFPO1FBQ1AsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3pCLENBQUM7SUFJRCxJQUFJLE9BQU8sQ0FBQyxLQUFLO1FBQ2IsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLElBQUksSUFBSSxDQUFDLFFBQVE7WUFDYixVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFFbEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFFdEIsSUFBSSxLQUFLLElBQUksVUFBVSxLQUFLLEtBQUssQ0FBQyxFQUFFLEVBQUU7WUFDbEMsT0FBTztTQUNWO1FBRUQsSUFBSSxJQUFJLENBQUMsV0FBVztZQUNoQixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFFdkIsSUFBSSxLQUFLLEVBQUU7WUFDUCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLENBQUM7U0FDMUY7SUFDTCxDQUFDO0lBRUQsTUFBTTtRQUNGLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELE1BQU07UUFDRixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxNQUFNO1FBQ0YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMxQixDQUFDOzs7WUE1RUosU0FBUyxTQUFDO2dCQUNQLFFBQVEsRUFBRSxvQkFBb0I7Z0JBQzlCLFFBQVEsRUFBRTs7Ozs7Ozs7S0FRVDt5QkFDUSxFQUFFO2FBQ2Q7OztZQWRRLGVBQWU7OztzQkEyQm5CLE1BQU07dUJBS04sTUFBTTt1QkFLTixNQUFNO3NCQUtOLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ2hhdE1lc3NhZ2UgfSBmcm9tICdAYmFudGEvY29tbW9uJztcclxuaW1wb3J0IHsgU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBDaGF0QmFja2VuZEJhc2UgfSBmcm9tICcuLi9jaGF0LWJhY2tlbmQtYmFzZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnYmFudGEtbGl2ZS1jb21tZW50JyxcclxuICAgIHRlbXBsYXRlOiBgXHJcbiAgICAgICAgPGJhbnRhLWNvbW1lbnQgXHJcbiAgICAgICAgICAgICpuZ0lmPVwibWVzc2FnZVwiXHJcbiAgICAgICAgICAgIFttZXNzYWdlXT1cIm1lc3NhZ2VcIlxyXG4gICAgICAgICAgICAodXB2b3RlZCk9XCJ1cHZvdGUoKVwiXHJcbiAgICAgICAgICAgIChyZXBvcnRlZCk9XCJyZXBvcnQoKVwiXHJcbiAgICAgICAgICAgIChzZWxlY3RlZCk9XCJzZWxlY3QoKVwiXHJcbiAgICAgICAgICAgID48L2JhbnRhLWNvbW1lbnQ+XHJcbiAgICBgLFxyXG4gICAgc3R5bGVzOiBbYGBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMaXZlQ29tbWVudENvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIGJhY2tlbmQgOiBDaGF0QmFja2VuZEJhc2VcclxuICAgICkge1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9tZXNzYWdlIDogQ2hhdE1lc3NhZ2U7XHJcbiAgICBwcml2YXRlIF91cHZvdGVkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICAgIHByaXZhdGUgX3JlcG9ydGVkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICAgIHByaXZhdGUgX3NlbGVjdGVkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuXHJcbiAgICBAT3V0cHV0KClcclxuICAgIGdldCB1cHZvdGVkKCkgOiBPYnNlcnZhYmxlPHZvaWQ+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdXB2b3RlZDtcclxuICAgIH1cclxuICAgIFxyXG4gICAgQE91dHB1dCgpXHJcbiAgICBnZXQgcmVwb3J0ZWQoKSA6IE9ic2VydmFibGU8dm9pZD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yZXBvcnRlZDtcclxuICAgIH1cclxuXHJcbiAgICBAT3V0cHV0KClcclxuICAgIGdldCBzZWxlY3RlZCgpIDogT2JzZXJ2YWJsZTx2b2lkPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBASW5wdXQoKVxyXG4gICAgZ2V0IG1lc3NhZ2UoKSA6IENoYXRNZXNzYWdlIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbWVzc2FnZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVuc3Vic2NyaWJlIDogRnVuY3Rpb247XHJcblxyXG4gICAgc2V0IG1lc3NhZ2UodmFsdWUpIHtcclxuICAgICAgICBsZXQgb3JpZ2luYWxJZCA9IG51bGw7XHJcbiAgICAgICAgaWYgKHRoaXMuX21lc3NhZ2UpXHJcbiAgICAgICAgICAgIG9yaWdpbmFsSWQgPSB0aGlzLl9tZXNzYWdlLmlkO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuX21lc3NhZ2UgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgaWYgKHZhbHVlICYmIG9yaWdpbmFsSWQgPT09IHZhbHVlLmlkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKHRoaXMudW5zdWJzY3JpYmUpXHJcbiAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcclxuICAgICAgICBcclxuICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSA9IHRoaXMuYmFja2VuZC53YXRjaE1lc3NhZ2UodmFsdWUsIG1lc3NhZ2UgPT4gdGhpcy5tZXNzYWdlID0gbWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJlcG9ydCgpIHtcclxuICAgICAgICB0aGlzLl9yZXBvcnRlZC5uZXh0KCk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHVwdm90ZSgpIHtcclxuICAgICAgICB0aGlzLl91cHZvdGVkLm5leHQoKTtcclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3QoKSB7XHJcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWQubmV4dCgpO1xyXG4gICAgfVxyXG59Il19
@@ -1,9 +0,0 @@
1
- import { Directive } from "@angular/core";
2
- export class BantaReplySendOptionsDirective {
3
- }
4
- BantaReplySendOptionsDirective.decorators = [
5
- { type: Directive, args: [{
6
- selector: `[bantaReplySendOptions]`
7
- },] }
8
- ];
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwbHktc2VuZC1vcHRpb25zLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Nkay9zcmMvbGliL2NvbW1lbnRzL3JlcGx5LXNlbmQtb3B0aW9ucy5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUsxQyxNQUFNLE9BQU8sOEJBQThCOzs7WUFIMUMsU0FBUyxTQUFDO2dCQUNQLFFBQVEsRUFBRSx5QkFBeUI7YUFDdEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgICBzZWxlY3RvcjogYFtiYW50YVJlcGx5U2VuZE9wdGlvbnNdYFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQmFudGFSZXBseVNlbmRPcHRpb25zRGlyZWN0aXZlIHt9Il19