@banta/sdk 4.6.26 → 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 (131) hide show
  1. package/{esm2015/banta-sdk.js → esm2020/banta-sdk.mjs} +0 -0
  2. package/{esm2015/lib/attachment-scraper.js → esm2020/lib/attachment-scraper.mjs} +0 -0
  3. package/esm2020/lib/banta/banta.component.mjs +204 -0
  4. package/esm2020/lib/banta-logo.component.mjs +11 -0
  5. package/esm2020/lib/banta-sdk.module.mjs +144 -0
  6. package/esm2020/lib/chat/banta-chat/banta-chat.component.mjs +185 -0
  7. package/esm2020/lib/chat/chat-message/chat-message.component.mjs +62 -0
  8. package/esm2020/lib/chat/chat-view/chat-view.component.mjs +170 -0
  9. package/esm2020/lib/chat/chat.module.mjs +51 -0
  10. package/{esm2015/lib/chat/index.js → esm2020/lib/chat/index.mjs} +0 -0
  11. package/esm2020/lib/chat/live-chat-message.component.mjs +80 -0
  12. package/{esm2015/lib/chat-backend-base.js → esm2020/lib/chat-backend-base.mjs} +0 -0
  13. package/esm2020/lib/chat-backend.mjs +83 -0
  14. package/{esm2015/lib/chat-source-base.js → esm2020/lib/chat-source-base.mjs} +0 -0
  15. package/esm2020/lib/chat-source.mjs +169 -0
  16. package/esm2020/lib/comments/attachment-button/attachment-button.component.mjs +69 -0
  17. package/esm2020/lib/comments/attachment-scraper.directive.mjs +107 -0
  18. package/esm2020/lib/comments/banta-comments/banta-comments.component.mjs +666 -0
  19. package/esm2020/lib/comments/comment/comment.component.mjs +217 -0
  20. package/esm2020/lib/comments/comment-field/comment-field.component.mjs +377 -0
  21. package/esm2020/lib/comments/comment-sort/comment-sort.component.mjs +37 -0
  22. package/esm2020/lib/comments/comment-view/comment-view.component.mjs +379 -0
  23. package/esm2020/lib/comments/comments.module.mjs +111 -0
  24. package/{esm2015/lib/comments/index.js → esm2020/lib/comments/index.mjs} +0 -0
  25. package/esm2020/lib/comments/live-comment.component.mjs +80 -0
  26. package/esm2020/lib/comments/reply-send-options.directive.mjs +13 -0
  27. package/esm2020/lib/common/attachment/attachment.component.mjs +113 -0
  28. package/esm2020/lib/common/attachments/attachments.component.mjs +72 -0
  29. package/esm2020/lib/common/common.module.mjs +59 -0
  30. package/{esm2015/lib/common/index.js → esm2020/lib/common/index.mjs} +0 -0
  31. package/{esm2015/lib/common/lazy-connection.js → esm2020/lib/common/lazy-connection.mjs} +0 -0
  32. package/esm2020/lib/common/lightbox/lightbox.component.mjs +31 -0
  33. package/esm2020/lib/common/markdown-to-html.pipe.mjs +76 -0
  34. package/esm2020/lib/common/mention-linker.pipe.mjs +35 -0
  35. package/esm2020/lib/common/timestamp.component.mjs +113 -0
  36. package/esm2020/lib/common/trust-resource-url.pipe.mjs +22 -0
  37. package/esm2020/lib/emoji/emoji-selector-button.component.mjs +113 -0
  38. package/esm2020/lib/emoji/emoji-selector-panel/emoji-selector-panel.component.mjs +88 -0
  39. package/esm2020/lib/emoji/emoji.module.mjs +55 -0
  40. package/{esm2015/lib/emoji/emojis.js → esm2020/lib/emoji/emojis.mjs} +0 -0
  41. package/{esm2015/lib/emoji/index.js → esm2020/lib/emoji/index.mjs} +0 -0
  42. package/esm2020/lib/giphy-attachments.mjs +16 -0
  43. package/{esm2015/lib/index.js → esm2020/lib/index.mjs} +0 -0
  44. package/esm2020/lib/live-message.component.mjs +96 -0
  45. package/{esm2015/lib/message-menu-item.js → esm2020/lib/message-menu-item.mjs} +0 -0
  46. package/{esm2015/lib/sdk-options.js → esm2020/lib/sdk-options.mjs} +0 -0
  47. package/esm2020/lib/tweet-attachments.mjs +13 -0
  48. package/esm2020/lib/url-attachments.mjs +42 -0
  49. package/esm2020/lib/youtube-attachments.mjs +22 -0
  50. package/{esm2015/public-api.js → esm2020/public-api.mjs} +0 -0
  51. package/fesm2015/{banta-sdk.js → banta-sdk.mjs} +2323 -2008
  52. package/fesm2015/banta-sdk.mjs.map +1 -0
  53. package/fesm2020/banta-sdk.mjs +10490 -0
  54. package/fesm2020/banta-sdk.mjs.map +1 -0
  55. package/{banta-sdk.d.ts → index.d.ts} +1 -0
  56. package/lib/banta/banta.component.d.ts +3 -0
  57. package/lib/banta-logo.component.d.ts +3 -0
  58. package/lib/banta-sdk.module.d.ts +24 -0
  59. package/lib/chat/banta-chat/banta-chat.component.d.ts +3 -0
  60. package/lib/chat/chat-message/chat-message.component.d.ts +3 -0
  61. package/lib/chat/chat-view/chat-view.component.d.ts +3 -0
  62. package/lib/chat/chat.module.d.ts +13 -0
  63. package/lib/chat/live-chat-message.component.d.ts +3 -0
  64. package/lib/chat-backend.d.ts +3 -0
  65. package/lib/chat-source.d.ts +3 -3
  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 -11895
  92. package/bundles/banta-sdk.umd.js.map +0 -1
  93. package/bundles/banta-sdk.umd.min.js +0 -2
  94. package/bundles/banta-sdk.umd.min.js.map +0 -1
  95. package/esm2015/lib/banta/banta.component.js +0 -201
  96. package/esm2015/lib/banta-logo.component.js +0 -20
  97. package/esm2015/lib/banta-sdk.module.js +0 -98
  98. package/esm2015/lib/chat/banta-chat/banta-chat.component.js +0 -175
  99. package/esm2015/lib/chat/chat-message/chat-message.component.js +0 -56
  100. package/esm2015/lib/chat/chat-view/chat-view.component.js +0 -167
  101. package/esm2015/lib/chat/chat.module.js +0 -32
  102. package/esm2015/lib/chat/live-chat-message.component.js +0 -71
  103. package/esm2015/lib/chat-backend.js +0 -92
  104. package/esm2015/lib/chat-source.js +0 -205
  105. package/esm2015/lib/comments/attachment-button/attachment-button.component.js +0 -70
  106. package/esm2015/lib/comments/attachment-scraper.directive.js +0 -109
  107. package/esm2015/lib/comments/banta-comments/banta-comments.component.js +0 -678
  108. package/esm2015/lib/comments/comment/comment.component.js +0 -186
  109. package/esm2015/lib/comments/comment-field/comment-field.component.js +0 -350
  110. package/esm2015/lib/comments/comment-sort/comment-sort.component.js +0 -34
  111. package/esm2015/lib/comments/comment-view/comment-view.component.js +0 -364
  112. package/esm2015/lib/comments/comments.module.js +0 -62
  113. package/esm2015/lib/comments/live-comment.component.js +0 -71
  114. package/esm2015/lib/comments/reply-send-options.directive.js +0 -9
  115. package/esm2015/lib/common/attachment/attachment.component.js +0 -105
  116. package/esm2015/lib/common/attachments/attachments.component.js +0 -66
  117. package/esm2015/lib/common/common.module.js +0 -36
  118. package/esm2015/lib/common/lightbox/lightbox.component.js +0 -30
  119. package/esm2015/lib/common/markdown-to-html.pipe.js +0 -74
  120. package/esm2015/lib/common/mention-linker.pipe.js +0 -31
  121. package/esm2015/lib/common/timestamp.component.js +0 -106
  122. package/esm2015/lib/common/trust-resource-url.pipe.js +0 -21
  123. package/esm2015/lib/emoji/emoji-selector-button.component.js +0 -108
  124. package/esm2015/lib/emoji/emoji-selector-panel/emoji-selector-panel.component.js +0 -86
  125. package/esm2015/lib/emoji/emoji.module.js +0 -34
  126. package/esm2015/lib/giphy-attachments.js +0 -20
  127. package/esm2015/lib/live-message.component.js +0 -74
  128. package/esm2015/lib/tweet-attachments.js +0 -16
  129. package/esm2015/lib/url-attachments.js +0 -46
  130. package/esm2015/lib/youtube-attachments.js +0 -25
  131. package/fesm2015/banta-sdk.js.map +0 -1
@@ -1,201 +0,0 @@
1
- import { __awaiter } from "tslib";
2
- import { Component, Input, ViewChild, HostBinding } from "@angular/core";
3
- import { Subject, Observable, Subscription } from 'rxjs';
4
- import { MatDialog } from '@angular/material/dialog';
5
- import { BantaChatComponent } from '../chat';
6
- import { Output } from "@angular/core";
7
- import { ChatBackendBase } from "../chat-backend-base";
8
- /**
9
- * Unified chat and comments component
10
- */
11
- export class BantaComponent {
12
- constructor(backend, matDialog) {
13
- this.backend = backend;
14
- this.matDialog = matDialog;
15
- this._subs = new Subscription();
16
- this.auxOpen = false;
17
- this.auxTitle = 'Notifications';
18
- this.auxMode = 'notifications';
19
- this.mobileFocus = null;
20
- this.newNotifications = false;
21
- this.chatLabel = 'Chat';
22
- this.commentsLabel = 'Comments';
23
- this._signInSelected = new Subject();
24
- this.pointOpen = null;
25
- this.pointSubChat = null;
26
- this.newPointSubMessage = {};
27
- this.genericAvatarUrl = 'https://gravatar.com/avatar/915c804e0be607a4ad766ddadea5c48a?s=512&d=https://codepen.io/assets/avatars/user-avatar-512x512-6e240cf350d2f1cc07c2bed234c3a3bb5f1b237023c204c782622e80d6b212ba.png';
28
- }
29
- ngOnInit() {
30
- this._subs.add(this.backend.userChanged.subscribe(user => this.currentUser = user));
31
- this._subs.add(this.backend.notificationsChanged.subscribe(notifs => this.notifications = notifs));
32
- this._subs.add(this.backend.newNotification.subscribe(notif => {
33
- this.newNotifications = true;
34
- }));
35
- }
36
- sendPointSubMessage() {
37
- return __awaiter(this, void 0, void 0, function* () {
38
- let text = (this.newPointSubMessage.message || '').trim();
39
- this.newPointSubMessage.message = '';
40
- if (text === '')
41
- return;
42
- let message = {
43
- user: null,
44
- sentAt: Date.now(),
45
- likes: 0,
46
- message: text
47
- };
48
- try {
49
- yield this.pointSubChat.send(message);
50
- }
51
- catch (e) {
52
- console.error(`Failed to send point sub-message:`);
53
- console.error(e);
54
- }
55
- });
56
- }
57
- goToMessage(message) {
58
- return __awaiter(this, void 0, void 0, function* () {
59
- let targetMessage = message;
60
- if (message.parentMessageId) {
61
- // jump to the parent message thread...
62
- let parentMessage;
63
- try {
64
- parentMessage = yield this.backend.getMessage(message.topicId, message.parentMessageId);
65
- }
66
- catch (e) {
67
- console.error(`Received exception while fetching parent message:`);
68
- console.error(e);
69
- }
70
- if (!parentMessage) {
71
- console.error(`Failed to look up parent message ${message.topicId}/${message.parentMessageId}`);
72
- console.error(`Original message was:`);
73
- console.dir(targetMessage);
74
- return;
75
- }
76
- message = parentMessage;
77
- }
78
- let viewType = this.getViewType(message);
79
- if (viewType === 'comment') {
80
- if (this.pointSubChat) {
81
- if (this.pointSubChat.close)
82
- this.pointSubChat.close();
83
- this.pointSubChat = null;
84
- }
85
- this.mobileFocus = 'points';
86
- this.pointOpen = message;
87
- this.pointSubChat = yield this.backend.getSourceForThread(message.topicId, message.id);
88
- this.pointOpen = yield this.backend.refreshMessage(message);
89
- this.newPointSubMessage = {};
90
- }
91
- else if (viewType === 'chat') {
92
- this.mobileFocus = 'firehose';
93
- this.firehose.jumpToMessage(message);
94
- }
95
- });
96
- }
97
- pointUnfocus() {
98
- this.pointOpen = null;
99
- if (this.pointSubChat) {
100
- if (this.pointSubChat.close)
101
- this.pointSubChat.close();
102
- this.pointSubChat = null;
103
- }
104
- }
105
- ngOnDestroy() {
106
- this._subs.unsubscribe();
107
- }
108
- showAux(title, mode) {
109
- this.auxOpen = true;
110
- this.auxTitle = title;
111
- this.auxMode = mode;
112
- this.mobileFocus = 'aux';
113
- }
114
- showNotifications() {
115
- this.showAux('Notifications', 'notifications');
116
- }
117
- get topicID() {
118
- return this._topicID;
119
- }
120
- set topicID(value) {
121
- this._topicID = value;
122
- this.close();
123
- this.connectToTopic(this._topicID);
124
- }
125
- connectToTopic(id) {
126
- return __awaiter(this, void 0, void 0, function* () {
127
- this.firehoseSource = yield this.backend.getSourceForTopic(`${id}_firehose`);
128
- this.pointSource = yield this.backend.getSourceForTopic(`${id}_thepoint`);
129
- });
130
- }
131
- get signInSelected() {
132
- return this._signInSelected;
133
- }
134
- showSignIn() {
135
- this._signInSelected.next();
136
- }
137
- close() {
138
- if (this.firehoseSource) {
139
- if (this.firehoseSource.close)
140
- this.firehoseSource.close();
141
- this.firehoseSource = null;
142
- }
143
- if (this.pointSource) {
144
- if (this.pointSource.close)
145
- this.pointSource.close();
146
- this.pointSource = null;
147
- }
148
- }
149
- get hasPoint() {
150
- return this.pointOpen != null;
151
- }
152
- closeAux() {
153
- this.auxOpen = false;
154
- this.mobileFocus = 'firehose';
155
- }
156
- getViewType(message) {
157
- if (message.topicId.endsWith('_firehose'))
158
- return 'chat';
159
- else if (message.topicId.endsWith('_thepoint'))
160
- return 'comment';
161
- return 'comment';
162
- }
163
- upvoteMessage(message) {
164
- return __awaiter(this, void 0, void 0, function* () {
165
- // TODO
166
- //await this.backend.likeMessage(message.id);
167
- });
168
- }
169
- showProfile(user) {
170
- this.profileUser = user;
171
- this.showAux(`@${user.username}'s Profile`, 'profile');
172
- }
173
- sendReport(message) {
174
- this.auxOpen = false;
175
- alert('would send report');
176
- }
177
- reportMessage(message) {
178
- this.reportedMessage = message;
179
- this.showAux(`Report message from @${message.user.username}`, 'report');
180
- }
181
- }
182
- BantaComponent.decorators = [
183
- { type: Component, args: [{
184
- selector: `banta`,
185
- template: "\r\n<mat-menu #userMenu=\"matMenu\">\r\n <ng-container *ngIf=\"currentUser\">\r\n <button [disabled]=\"true\" mat-menu-item>{{currentUser.displayName}} (@{{currentUser.username}})</button>\r\n <button mat-menu-item (click)=\"signOut()\">Sign Out</button>\r\n </ng-container>\r\n <ng-container *ngIf=\"!currentUser\">\r\n <button mat-menu-item>Sign In</button>\r\n </ng-container>\r\n <button mat-menu-item>Help</button>\r\n</mat-menu>\r\n\r\n<div class=\"tabs\">\r\n <div>\r\n <a mat-button (click)=\"mobileFocus = 'chat'\">{{chatLabel}}</a>\r\n <a mat-button (click)=\"mobileFocus = 'comments'\">{{commentsLabel}}</a>\r\n </div>\r\n <div class=\"spacer\"></div>\r\n <div>\r\n <ng-container *ngIf=\"currentUser\">\r\n <button mat-button [matMenuTriggerFor]=\"userMenu\">\r\n @{{currentUser.username}}\r\n </button>\r\n <button mat-icon-button (click)=\"showNotifications()\">\r\n <mat-icon>notification_important</mat-icon>\r\n </button>\r\n </ng-container>\r\n \r\n <button mat-button *ngIf=\"!currentUser\" (click)=\"showSignIn()\">\r\n Sign In\r\n </button>\r\n </div>\r\n</div>\r\n\r\n<div class=\"firehose\" [class.focus]=\"mobileFocus === 'chat'\">\r\n <header>\r\n <div>\r\n <label (click)=\"mobileFocus = 'chat'\">{{chatLabel}}</label>\r\n <div class=\"spacer\"></div>\r\n\r\n <ng-container *ngIf=\"currentUser\">\r\n <button mat-button [matMenuTriggerFor]=\"userMenu\">\r\n @{{currentUser.username}}\r\n </button>\r\n <button mat-icon-button (click)=\"showNotifications()\">\r\n <mat-icon>notification_important</mat-icon>\r\n </button>\r\n </ng-container>\r\n \r\n <button mat-button *ngIf=\"!currentUser\" (click)=\"showSignIn()\">\r\n Sign In\r\n </button>\r\n </div>\r\n </header>\r\n <banta-chat \r\n #firehose\r\n [source]=\"firehoseSource\"\r\n (signInSelected)=\"showSignIn()\"\r\n (upvoted)=\"upvoteMessage($event)\"\r\n (userSelected)=\"showProfile($event.user)\"\r\n (reported)=\"reportMessage($event)\"\r\n ></banta-chat>\r\n</div>\r\n\r\n<div class=\"aux\" [class.focus]=\"mobileFocus === 'aux'\" [class.open]=\"auxOpen\">\r\n <header>\r\n <div>\r\n <label>{{auxTitle}}</label>\r\n <div class=\"spacer\"></div>\r\n <button mat-icon-button (click)=\"auxOpen = false\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </header>\r\n <div class=\"aux-contents\">\r\n <ng-container *ngIf=\"auxMode === 'profile'\">\r\n <ng-container *ngIf=\"profileUser\">\r\n\r\n <div>\r\n <strong style=\"font-size: 125%;\">\r\n {{profileUser.displayName}}\r\n </strong>\r\n @{{profileUser.username}}\r\n </div>\r\n\r\n <br/>\r\n <strong>Top Messages</strong>\r\n\r\n <div>\r\n <em>Not yet available</em>\r\n </div>\r\n\r\n <br/>\r\n <strong>Recent Messages</strong>\r\n\r\n <div>\r\n <em>Not yet available</em>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"auxMode === 'report'\">\r\n <p>Are you sure you want to report this message?</p>\r\n\r\n <banta-live-message [message]=\"reportedMessage\"></banta-live-message>\r\n\r\n <div style=\"text-align: center;\">\r\n <button mat-raised-button color=\"primary\" (click)=\"sendReport(reportedMessage)\">Yes, Report</button>\r\n &nbsp;\r\n <button mat-raised-button color=\"secondary\" (click)=\"auxOpen = false\">No, Cancel</button>\r\n </div>\r\n\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"auxMode === 'notifications'\">\r\n\r\n <div *ngIf=\"!notifications || notifications.length === 0\">\r\n <em>You do not have any notifications yet</em>\r\n </div>\r\n \r\n <div class=\"notifications\">\r\n <div class=\"notification\" *ngFor=\"let notif of notifications\">\r\n <div>\r\n <ng-container *ngIf=\"notif.type === 'upvote'\">\r\n @{{notif.message?.user?.username}} upvoted your post\r\n \r\n <banta-live-message\r\n [message]=\"notif.message\"\r\n (upvoted)=\"upvoteMessage(notif.message)\"\r\n (reported)=\"reportMessage(notif.message)\"\r\n (selected)=\"goToMessage(notif.message)\">\r\n </banta-live-message>\r\n\r\n </ng-container>\r\n <ng-container *ngIf=\"notif.type === 'notice'\">\r\n <div>\r\n {{notif.message}}\r\n </div>\r\n <a mat-button target=\"_blank\" href=\"{{notif.actionUrl}}\">\r\n {{notif.actionLabel}}\r\n </a>\r\n </ng-container>\r\n <ng-container *ngIf=\"notif.type === 'mention'\">\r\n You were mentioned by @{{notif.message?.user?.username}}\r\n\r\n <banta-live-message\r\n [message]=\"notif.message\"\r\n (upvoted)=\"upvoteMessage(notif.message)\"\r\n (reported)=\"reportMessage(notif.message)\"\r\n (selected)=\"goToMessage(notif.message)\">\r\n </banta-live-message>\r\n\r\n </ng-container>\r\n <ng-container *ngIf=\"notif.type === 'reply'\">\r\n @{{notif.replyMessage?.user?.username}} replied to your post\r\n \r\n <banta-live-message\r\n [message]=\"notif.replyMessage\"\r\n (upvoted)=\"upvoteMessage(notif.replyMessage)\"\r\n (reported)=\"reportMessage(notif.replyMessage)\"\r\n (selected)=\"goToMessage(notif.replyMessage)\">\r\n </banta-live-message>\r\n </ng-container>\r\n </div>\r\n\r\n <banta-timestamp [value]=\"notif.sentAt\"></banta-timestamp>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n</div>\r\n<div class=\"points\" [class.focus]=\"mobileFocus === 'points'\">\r\n <header>\r\n <div>\r\n <label>{{commentsLabel}}</label>\r\n </div>\r\n </header>\r\n <div class=\"point-focus\">\r\n <div class=\"actions\">\r\n <button mat-button (click)=\"pointUnfocus()\">\r\n <mat-icon>arrow_back</mat-icon>\r\n Back\r\n </button>\r\n\r\n <div class=\"spacer\"></div>\r\n \r\n <ng-container *ngIf=\"pointOpen\">\r\n <div class=\"counted-action\">\r\n <div class=\"count-indicator\"> \r\n {{pointOpen.likes}}\r\n </div>\r\n <button mat-icon-button>\r\n <mat-icon>thumb_up</mat-icon>\r\n </button>\r\n </div>\r\n\r\n </ng-container>\r\n </div>\r\n\r\n <div *ngIf=\"!pointSubChat\">\r\n Error: No subchat\r\n </div>\r\n \r\n <banta-comment-view\r\n class=\"subcomments\"\r\n *ngIf=\"pointSubChat\"\r\n [newestLast]=\"true\"\r\n [allowReplies]=\"false\"\r\n [source]=\"pointSubChat\"\r\n (upvoted)=\"upvoteMessage($event)\"\r\n (reported)=\"reportMessage($event)\"\r\n (userSelected)=\"showProfile($event.user)\"\r\n >\r\n \r\n <banta-comment\r\n class=\"focused-comment\"\r\n data-before\r\n *ngIf=\"pointOpen\"\r\n (upvoted)=\"upvoteMessage(pointOpen)\"\r\n (userSelected)=\"showProfile(pointOpen.user)\"\r\n (reported)=\"reportMessage(pointOpen)\"\r\n [showReplyAction]=\"false\"\r\n [message]=\"pointOpen\"\r\n ></banta-comment>\r\n \r\n <div class=\"message reply\">\r\n Reply:\r\n <form class=\"new-message\" (submit)=\"sendPointSubMessage()\">\r\n <textarea \r\n name=\"message\" \r\n (keydown)=\"newPointSubMessageKeyDown($event)\"\r\n [(ngModel)]=\"newPointSubMessage.message\"></textarea>\r\n \r\n <div class=\"actions\">\r\n <button [disabled]=\"!newPointSubMessage.message\" \r\n mat-raised-button color=\"primary\">Send</button>\r\n </div>\r\n </form>\r\n </div>\r\n </banta-comment-view>\r\n </div>\r\n <div class=\"points-section\">\r\n <banta-comments\r\n [source]=\"pointSource\"\r\n (signInSelected)=\"showSignIn()\"\r\n (upvoted)=\"upvoteMessage($event)\"\r\n (reported)=\"reportMessage($event)\"\r\n (selected)=\"goToMessage($event)\"\r\n (userSelected)=\"showProfile($event.user)\"\r\n ></banta-comments>\r\n </div>\r\n</div>",
186
- styles: [":host{display:flex;flex-direction:row;padding:.5em;height:40em;position:relative}.counted-action{display:flex;align-items:center}.count-indicator{font-size:9pt;padding:0 3px;border-radius:3px;border:1px solid #333}header{position:relative;margin-bottom:1em}header div{display:flex;align-items:center;height:30px}header button{color:#666}header label{text-transform:uppercase;z-index:1;font-size:12pt;letter-spacing:2px;font-weight:100;color:#333;margin:0 auto 0 0;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;white-space:nowrap;overflow-x:hidden;text-overflow:ellipsis}header:after,header label{display:block;position:relative}header:after{content:\"\";border:1px solid #ccc;height:0;width:100%;z-index:0}.points{max-width:50em;display:flex;flex-direction:column}:host.point-focus .points{width:66%;max-width:50em}:host.point-focus .points .points-section{opacity:0;pointer-events:none}:host.point-focus .points .point-focus{opacity:1;pointer-events:auto}:host.point-focus .points .point-focus .actions{display:flex}banta-comments{flex-grow:1}.points{width:33%;margin-left:.5em;font-size:12pt;flex-shrink:0;max-width:30em;transition:width .2s ease-in,max-width .2s ease-in;position:relative}.points .points-section{opacity:1;z-index:2}.points .point-focus,.points .points-section{flex-grow:1;display:flex;flex-direction:column;transition:opacity .2s ease-in}.points .point-focus{position:absolute;width:100%;bottom:0;top:1.75em;right:0;left:0;padding:.5em;opacity:0}.firehose{flex-grow:1;font-size:10pt;display:flex;flex-direction:column}form{display:flex;padding:.5em 0;align-items:center}form textarea{font-size:14pt;min-height:6em}form input[type=text],form textarea{background:#000;color:#fff;border:1px solid #333;width:100%}form input[type=text]{height:1em}form .actions{margin-left:1em}form button{display:block;margin:0 0 0 auto}.subcomments ::ng-deep banta-comment{font-size:10pt}.subcomments ::ng-deep banta-comment.focused-comment{background:#001321;color:#fff;font-size:12pt}.aux{width:0;min-width:0;overflow-x:hidden;transition:width .4s ease-out,min-width .4s ease-out;display:flex;flex-direction:column}.aux.open{width:30em;min-width:18em}.aux .aux-contents{width:30em;min-width:10em;max-width:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;flex-grow:1}.notifications .notification{border-bottom:1px solid #333;padding:1em}.notifications .notification banta-timestamp{display:block;text-align:right;font-size:9pt;color:#999}.message.reply{padding:1em}.tabs{display:none}@media (max-width:1015px){:host{flex-direction:column}.tabs{display:flex;position:absolute;top:0;left:0;right:0;width:100%;z-index:10;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);background:rgba(0,0,0,.5)}.points{width:100%;max-width:100%;margin-left:0}header{display:none}.aux,:host.point-focus .points{width:100%;max-width:100%}.aux{min-width:0}.aux,.firehose,.points{position:absolute;top:2em;left:0;right:0;bottom:0;z-index:0;background:#000}.aux.focus,.firehose.focus,.points.focus{z-index:2}}:host-context(.mat-dark-theme) :host{background:#090909;color:#fff}:host-context(.mat-dark-theme) form textarea{background:#ccc;color:#333}:host-context(.mat-dark-theme) header:after{border-color:#222}:host-context(.mat-dark-theme) header label{color:#aaa}"]
187
- },] }
188
- ];
189
- BantaComponent.ctorParameters = () => [
190
- { type: ChatBackendBase },
191
- { type: MatDialog }
192
- ];
193
- BantaComponent.propDecorators = {
194
- firehose: [{ type: ViewChild, args: ['firehose', { static: true },] }],
195
- topicID: [{ type: Input }],
196
- chatLabel: [{ type: Input }],
197
- commentsLabel: [{ type: Input }],
198
- signInSelected: [{ type: Output }],
199
- hasPoint: [{ type: HostBinding, args: ['class.point-focus',] }]
200
- };
201
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFudGEuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2RrL3NyYy9saWIvYmFudGEvYmFudGEuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpFLE9BQU8sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN6RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDckQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzdDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBR3ZEOztHQUVHO0FBTUgsTUFBTSxPQUFPLGNBQWM7SUFDdkIsWUFDWSxPQUF5QixFQUN6QixTQUFxQjtRQURyQixZQUFPLEdBQVAsT0FBTyxDQUFrQjtRQUN6QixjQUFTLEdBQVQsU0FBUyxDQUFZO1FBUXpCLFVBQUssR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBRW5DLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFDaEIsYUFBUSxHQUFHLGVBQWUsQ0FBQztRQUMzQixZQUFPLEdBQUcsZUFBZSxDQUFDO1FBVTFCLGdCQUFXLEdBQVksSUFBSSxDQUFDO1FBeUU1QixxQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUErQmhCLGNBQVMsR0FBRyxNQUFNLENBQUM7UUFDbkIsa0JBQWEsR0FBRyxVQUFVLENBQUM7UUFjNUIsb0JBQWUsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBOEI5QyxjQUFTLEdBQWlCLElBQUksQ0FBQztRQUMvQixpQkFBWSxHQUFvQixJQUFJLENBQUM7UUEwQ3JDLHVCQUFr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SixTQUFTLFNBQUM7Z0JBQ1AsUUFBUSxFQUFFLE9BQU87Z0JBQ2pCLGtqVUFBcUM7O2FBRXhDOzs7WUFWUSxlQUFlO1lBSGYsU0FBUzs7O3VCQStEYixTQUFTLFNBQUMsVUFBVSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtzQkEyRXRDLEtBQUs7d0JBS0wsS0FBSzs0QkFDTCxLQUFLOzZCQWdCTCxNQUFNO3VCQXVCTixXQUFXLFNBQUMsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgVmlld0NoaWxkLCBIb3N0QmluZGluZyB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IE5ld01lc3NhZ2VGb3JtLCBDaGF0TWVzc2FnZSwgVXNlciwgTm90aWZpY2F0aW9uIH0gZnJvbSAnQGJhbnRhL2NvbW1vbic7XHJcbmltcG9ydCB7IFN1YmplY3QsIE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBCYW50YUNoYXRDb21wb25lbnQgfSBmcm9tICcuLi9jaGF0JztcclxuaW1wb3J0IHsgT3V0cHV0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgQ2hhdEJhY2tlbmRCYXNlIH0gZnJvbSBcIi4uL2NoYXQtYmFja2VuZC1iYXNlXCI7XHJcbmltcG9ydCB7IENoYXRTb3VyY2VCYXNlIH0gZnJvbSBcIi4uL2NoYXQtc291cmNlLWJhc2VcIjtcclxuXHJcbi8qKlxyXG4gKiBVbmlmaWVkIGNoYXQgYW5kIGNvbW1lbnRzIGNvbXBvbmVudFxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogYGJhbnRhYCxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9iYW50YS5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsgJy4vYmFudGEuY29tcG9uZW50LnNjc3MnIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIEJhbnRhQ29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgYmFja2VuZCA6IENoYXRCYWNrZW5kQmFzZSxcclxuICAgICAgICBwcml2YXRlIG1hdERpYWxvZyA6IE1hdERpYWxvZ1xyXG4gICAgKSB7XHJcbiAgICB9XHJcblxyXG4gICAgZmlyZWhvc2VTb3VyY2UgOiBDaGF0U291cmNlQmFzZTtcclxuICAgIHBvaW50U291cmNlIDogQ2hhdFNvdXJjZUJhc2U7XHJcblxyXG4gICAgcHJpdmF0ZSBfdG9waWNJRCA6IHN0cmluZztcclxuICAgIHByaXZhdGUgX3N1YnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XHJcblxyXG4gICAgYXV4T3BlbiA9IGZhbHNlO1xyXG4gICAgYXV4VGl0bGUgPSAnTm90aWZpY2F0aW9ucyc7XHJcbiAgICBhdXhNb2RlID0gJ25vdGlmaWNhdGlvbnMnO1xyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMuX3N1YnMuYWRkKHRoaXMuYmFja2VuZC51c2VyQ2hhbmdlZC5zdWJzY3JpYmUodXNlciA9PiB0aGlzLmN1cnJlbnRVc2VyID0gdXNlcikpO1xyXG4gICAgICAgIHRoaXMuX3N1YnMuYWRkKHRoaXMuYmFja2VuZC5ub3RpZmljYXRpb25zQ2hhbmdlZC5zdWJzY3JpYmUobm90aWZzID0+IHRoaXMubm90aWZpY2F0aW9ucyA9IG5vdGlmcykpO1xyXG4gICAgICAgIHRoaXMuX3N1YnMuYWRkKHRoaXMuYmFja2VuZC5uZXdOb3RpZmljYXRpb24uc3Vic2NyaWJlKG5vdGlmID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubmV3Tm90aWZpY2F0aW9ucyA9IHRydWU7XHJcbiAgICAgICAgfSkpO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBtb2JpbGVGb2N1cyA6IHN0cmluZyA9IG51bGw7XHJcblxyXG4gICAgYXN5bmMgc2VuZFBvaW50U3ViTWVzc2FnZSgpIHtcclxuICAgICAgICBsZXQgdGV4dCA9ICh0aGlzLm5ld1BvaW50U3ViTWVzc2FnZS5tZXNzYWdlIHx8ICcnKS50cmltKCk7XHJcbiAgICAgICAgdGhpcy5uZXdQb2ludFN1Yk1lc3NhZ2UubWVzc2FnZSA9ICcnO1xyXG5cclxuICAgICAgICBpZiAodGV4dCA9PT0gJycpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBcclxuICAgICAgICBsZXQgbWVzc2FnZSA6IENoYXRNZXNzYWdlID0ge1xyXG4gICAgICAgICAgICB1c2VyOiBudWxsLFxyXG4gICAgICAgICAgICBzZW50QXQ6IERhdGUubm93KCksXHJcbiAgICAgICAgICAgIGxpa2VzOiAwLFxyXG4gICAgICAgICAgICBtZXNzYWdlOiB0ZXh0XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5wb2ludFN1YkNoYXQuc2VuZChtZXNzYWdlKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byBzZW5kIHBvaW50IHN1Yi1tZXNzYWdlOmApO1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBAVmlld0NoaWxkKCdmaXJlaG9zZScsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgICBmaXJlaG9zZSA6IEJhbnRhQ2hhdENvbXBvbmVudDtcclxuXHJcbiAgICBhc3luYyBnb1RvTWVzc2FnZShtZXNzYWdlIDogQ2hhdE1lc3NhZ2UpIHtcclxuXHJcbiAgICAgICAgbGV0IHRhcmdldE1lc3NhZ2UgPSBtZXNzYWdlO1xyXG5cclxuICAgICAgICBpZiAobWVzc2FnZS5wYXJlbnRNZXNzYWdlSWQpIHtcclxuICAgICAgICAgICAgLy8ganVtcCB0byB0aGUgcGFyZW50IG1lc3NhZ2UgdGhyZWFkLi4uXHJcblxyXG4gICAgICAgICAgICBsZXQgcGFyZW50TWVzc2FnZTogQ2hhdE1lc3NhZ2U7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgcGFyZW50TWVzc2FnZSA9IGF3YWl0IHRoaXMuYmFja2VuZC5nZXRNZXNzYWdlKG1lc3NhZ2UudG9waWNJZCwgbWVzc2FnZS5wYXJlbnRNZXNzYWdlSWQpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBSZWNlaXZlZCBleGNlcHRpb24gd2hpbGUgZmV0Y2hpbmcgcGFyZW50IG1lc3NhZ2U6YCk7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoIXBhcmVudE1lc3NhZ2UpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byBsb29rIHVwIHBhcmVudCBtZXNzYWdlICR7bWVzc2FnZS50b3BpY0lkfS8ke21lc3NhZ2UucGFyZW50TWVzc2FnZUlkfWApO1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgT3JpZ2luYWwgbWVzc2FnZSB3YXM6YCk7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmRpcih0YXJnZXRNZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbWVzc2FnZSA9IHBhcmVudE1lc3NhZ2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgdmlld1R5cGUgPSB0aGlzLmdldFZpZXdUeXBlKG1lc3NhZ2UpO1xyXG5cclxuICAgICAgICBpZiAodmlld1R5cGUgPT09ICdjb21tZW50Jykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5wb2ludFN1YkNoYXQpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnBvaW50U3ViQ2hhdC5jbG9zZSlcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBvaW50U3ViQ2hhdC5jbG9zZSgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wb2ludFN1YkNoYXQgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMubW9iaWxlRm9jdXMgPSAncG9pbnRzJztcclxuICAgICAgICAgICAgdGhpcy5wb2ludE9wZW4gPSBtZXNzYWdlO1xyXG4gICAgICAgICAgICB0aGlzLnBvaW50U3ViQ2hhdCA9IGF3YWl0IHRoaXMuYmFja2VuZC5nZXRTb3VyY2VGb3JUaHJlYWQobWVzc2FnZS50b3BpY0lkLCBtZXNzYWdlLmlkKTtcclxuICAgICAgICAgICAgdGhpcy5wb2ludE9wZW4gPSBhd2FpdCB0aGlzLmJhY2tlbmQucmVmcmVzaE1lc3NhZ2UobWVzc2FnZSk7XHJcbiAgICAgICAgICAgIHRoaXMubmV3UG9pbnRTdWJNZXNzYWdlID0ge307XHJcbiAgICAgICAgfSBlbHNlIGlmICh2aWV3VHlwZSA9PT0gJ2NoYXQnKSB7XHJcbiAgICAgICAgICAgIHRoaXMubW9iaWxlRm9jdXMgPSAnZmlyZWhvc2UnO1xyXG4gICAgICAgICAgICB0aGlzLmZpcmVob3NlLmp1bXBUb01lc3NhZ2UobWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG5vdGlmaWNhdGlvbnMgOiBOb3RpZmljYXRpb25bXTtcclxuICAgIG5ld05vdGlmaWNhdGlvbnMgPSBmYWxzZTtcclxuICAgIFxyXG4gICAgcG9pbnRVbmZvY3VzKCkge1xyXG4gICAgICAgIHRoaXMucG9pbnRPcGVuID0gbnVsbDtcclxuICAgICAgICBpZiAodGhpcy5wb2ludFN1YkNoYXQpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMucG9pbnRTdWJDaGF0LmNsb3NlKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5wb2ludFN1YkNoYXQuY2xvc2UoKTtcclxuICAgICAgICAgICAgdGhpcy5wb2ludFN1YkNoYXQgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgICB0aGlzLl9zdWJzLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2hvd0F1eCh0aXRsZSA6IHN0cmluZywgbW9kZSA6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuYXV4T3BlbiA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5hdXhUaXRsZSA9IHRpdGxlO1xyXG4gICAgICAgIHRoaXMuYXV4TW9kZSA9IG1vZGU7XHJcbiAgICAgICAgdGhpcy5tb2JpbGVGb2N1cyA9ICdhdXgnO1xyXG4gICAgfVxyXG5cclxuICAgIHNob3dOb3RpZmljYXRpb25zKCkge1xyXG4gICAgICAgIHRoaXMuc2hvd0F1eCgnTm90aWZpY2F0aW9ucycsICdub3RpZmljYXRpb25zJyk7XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIGdldCB0b3BpY0lEKCkgOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl90b3BpY0lEO1xyXG4gICAgfVxyXG5cclxuICAgIEBJbnB1dCgpIGNoYXRMYWJlbCA9ICdDaGF0JztcclxuICAgIEBJbnB1dCgpIGNvbW1lbnRzTGFiZWwgPSAnQ29tbWVudHMnO1xyXG5cclxuICAgIHNldCB0b3BpY0lEKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5fdG9waWNJRCA9IHZhbHVlO1xyXG5cclxuICAgICAgICB0aGlzLmNsb3NlKCk7XHJcbiAgICAgICAgdGhpcy5jb25uZWN0VG9Ub3BpYyh0aGlzLl90b3BpY0lEKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIGNvbm5lY3RUb1RvcGljKGlkIDogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5maXJlaG9zZVNvdXJjZSA9IGF3YWl0IHRoaXMuYmFja2VuZC5nZXRTb3VyY2VGb3JUb3BpYyhgJHtpZH1fZmlyZWhvc2VgKTtcclxuICAgICAgICB0aGlzLnBvaW50U291cmNlID0gYXdhaXQgdGhpcy5iYWNrZW5kLmdldFNvdXJjZUZvclRvcGljKGAke2lkfV90aGVwb2ludGApO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3NpZ25JblNlbGVjdGVkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuXHJcbiAgICBAT3V0cHV0KClcclxuICAgIGdldCBzaWduSW5TZWxlY3RlZCgpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2lnbkluU2VsZWN0ZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgc2hvd1NpZ25JbigpIHtcclxuICAgICAgICB0aGlzLl9zaWduSW5TZWxlY3RlZC5uZXh0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZmlyZWhvc2VTb3VyY2UpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZmlyZWhvc2VTb3VyY2UuY2xvc2UpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmZpcmVob3NlU291cmNlLmNsb3NlKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZmlyZWhvc2VTb3VyY2UgPSBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMucG9pbnRTb3VyY2UpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMucG9pbnRTb3VyY2UuY2xvc2UpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnBvaW50U291cmNlLmNsb3NlKCk7XHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRTb3VyY2UgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLnBvaW50LWZvY3VzJylcclxuICAgIGdldCBoYXNQb2ludCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wb2ludE9wZW4gIT0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBwb2ludE9wZW4gOiBDaGF0TWVzc2FnZSA9IG51bGw7XHJcbiAgICBwb2ludFN1YkNoYXQgOiBDaGF0U291cmNlQmFzZSA9IG51bGw7XHJcblxyXG4gICAgY2xvc2VBdXgoKSB7XHJcbiAgICAgICAgdGhpcy5hdXhPcGVuID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5tb2JpbGVGb2N1cyA9ICdmaXJlaG9zZSc7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Vmlld1R5cGUobWVzc2FnZSA6IENoYXRNZXNzYWdlKSB7XHJcbiAgICAgICAgaWYgKG1lc3NhZ2UudG9waWNJZC5lbmRzV2l0aCgnX2ZpcmVob3NlJykpXHJcbiAgICAgICAgICAgIHJldHVybiAnY2hhdCc7XHJcbiAgICAgICAgZWxzZSBpZiAobWVzc2FnZS50b3BpY0lkLmVuZHNXaXRoKCdfdGhlcG9pbnQnKSlcclxuICAgICAgICAgICAgcmV0dXJuICdjb21tZW50JztcclxuXHJcbiAgICAgICAgcmV0dXJuICdjb21tZW50JztcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyB1cHZvdGVNZXNzYWdlKG1lc3NhZ2UgOiBDaGF0TWVzc2FnZSkge1xyXG4gICAgICAgIC8vIFRPRE9cclxuICAgICAgICAvL2F3YWl0IHRoaXMuYmFja2VuZC5saWtlTWVzc2FnZShtZXNzYWdlLmlkKTtcclxuICAgIH1cclxuXHJcbiAgICBzaG93UHJvZmlsZSh1c2VyIDogVXNlcikge1xyXG4gICAgICAgIHRoaXMucHJvZmlsZVVzZXIgPSB1c2VyO1xyXG4gICAgICAgIHRoaXMuc2hvd0F1eChgQCR7dXNlci51c2VybmFtZX0ncyBQcm9maWxlYCwgJ3Byb2ZpbGUnKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm9maWxlVXNlciA6IFVzZXI7XHJcbiAgICBcclxuICAgIHJlcG9ydGVkTWVzc2FnZSA6IENoYXRNZXNzYWdlO1xyXG5cclxuICAgIHNlbmRSZXBvcnQobWVzc2FnZSA6IENoYXRNZXNzYWdlKSB7XHJcbiAgICAgICAgdGhpcy5hdXhPcGVuID0gZmFsc2U7XHJcbiAgICAgICAgYWxlcnQoJ3dvdWxkIHNlbmQgcmVwb3J0Jyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVwb3J0TWVzc2FnZShtZXNzYWdlIDogQ2hhdE1lc3NhZ2UpIHtcclxuICAgICAgICB0aGlzLnJlcG9ydGVkTWVzc2FnZSA9IG1lc3NhZ2U7XHJcbiAgICAgICAgdGhpcy5zaG93QXV4KGBSZXBvcnQgbWVzc2FnZSBmcm9tIEAke21lc3NhZ2UudXNlci51c2VybmFtZX1gLCAncmVwb3J0Jyk7XHJcbiAgICB9XHJcblxyXG4gICAgY3VycmVudFVzZXIgOiBVc2VyO1xyXG5cclxuICAgIG5ld1BvaW50U3ViTWVzc2FnZSA6IE5ld01lc3NhZ2VGb3JtID0ge307XHJcblxyXG4gICAgZ2VuZXJpY0F2YXRhclVybCA9ICdodHRwczovL2dyYXZhdGFyLmNvbS9hdmF0YXIvOTE1YzgwNGUwYmU2MDdhNGFkNzY2ZGRhZGVhNWM0OGE/cz01MTImZD1odHRwczovL2NvZGVwZW4uaW8vYXNzZXRzL2F2YXRhcnMvdXNlci1hdmF0YXItNTEyeDUxMi02ZTI0MGNmMzUwZDJmMWNjMDdjMmJlZDIzNGMzYTNiYjVmMWIyMzcwMjNjMjA0Yzc4MjYyMmU4MGQ2YjIxMmJhLnBuZyc7XHJcbn0iXX0=
@@ -1,20 +0,0 @@
1
- import { Component } from "@angular/core";
2
- export class BantaLogoComponent {
3
- }
4
- BantaLogoComponent.decorators = [
5
- { type: Component, args: [{
6
- selector: 'banta-logo',
7
- template: `banta`,
8
- styles: [`
9
- :host {
10
- font-family: 'Odibee Sans', sans-serif;
11
- font-size: 40pt;
12
- }
13
-
14
- :host.small {
15
- font-size: 30pt;
16
- }
17
- `]
18
- },] }
19
- ];
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFudGEtbG9nby5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zZGsvc3JjL2xpYi9iYW50YS1sb2dvLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBa0IxQyxNQUFNLE9BQU8sa0JBQWtCOzs7WUFoQjlCLFNBQVMsU0FBQztnQkFDUCxRQUFRLEVBQUUsWUFBWTtnQkFDdEIsUUFBUSxFQUFFLE9BQU87eUJBRWI7Ozs7Ozs7OztTQVNDO2FBRVIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2JhbnRhLWxvZ28nLFxyXG4gICAgdGVtcGxhdGU6IGBiYW50YWAsXHJcbiAgICBzdHlsZXM6IFtcclxuICAgICAgICBgXHJcbiAgICAgICAgOmhvc3Qge1xyXG4gICAgICAgICAgICBmb250LWZhbWlseTogJ09kaWJlZSBTYW5zJywgc2Fucy1zZXJpZjtcclxuICAgICAgICAgICAgZm9udC1zaXplOiA0MHB0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgOmhvc3Quc21hbGwge1xyXG4gICAgICAgICAgICBmb250LXNpemU6IDMwcHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGBcclxuICAgIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIEJhbnRhTG9nb0NvbXBvbmVudCB7XHJcblxyXG59Il19
@@ -1,98 +0,0 @@
1
- import { NgModule } from '@angular/core';
2
- import { CommentsModule } from './comments';
3
- import { ChatModule } from './chat';
4
- import { EmojiModule } from './emoji';
5
- import { BantaComponent } from './banta/banta.component';
6
- import { BantaLogoComponent } from './banta-logo.component';
7
- import { CommonModule } from '@angular/common';
8
- import { FormsModule } from '@angular/forms';
9
- import { BantaCommonModule } from './common/common.module';
10
- import { LiveMessageComponent } from './live-message.component';
11
- import { MatButtonModule } from "@angular/material/button";
12
- import { MatIconModule } from "@angular/material/icon";
13
- import { MatTooltipModule } from "@angular/material/tooltip";
14
- import { MatMenuModule } from "@angular/material/menu";
15
- import { MatDialogModule } from "@angular/material/dialog";
16
- import { MatSnackBarModule } from "@angular/material/snack-bar";
17
- import { MatFormFieldModule } from "@angular/material/form-field";
18
- import { MatInputModule } from "@angular/material/input";
19
- import { MatProgressSpinnerModule } from "@angular/material/progress-spinner";
20
- import { ChatBackend } from './chat-backend';
21
- import { BANTA_SDK_OPTIONS } from './sdk-options';
22
- import { ChatBackendBase } from './chat-backend-base';
23
- import { OverlayModule } from '@angular/cdk/overlay';
24
- import { PortalModule } from '@angular/cdk/portal';
25
- import { UrlAttachmentResolver, UrlAttachmentScraper } from './url-attachments';
26
- import { YouTubeAttachmentResolver } from './youtube-attachments';
27
- import { GiphyAttachmentResolver } from './giphy-attachments';
28
- import { TweetAttachmentResolver } from './tweet-attachments';
29
- export class BantaSdkModule {
30
- constructor(chatBackend) {
31
- if (typeof window !== 'undefined') {
32
- if (!document.querySelector('script[src="https://platform.twitter.com/widgets.js"]')) {
33
- let script = document.createElement('script');
34
- script.src = 'https://platform.twitter.com/widgets.js';
35
- script.async = true;
36
- document.body.appendChild(script);
37
- }
38
- }
39
- chatBackend.registerAttachmentScraper(new UrlAttachmentScraper());
40
- chatBackend.registerAttachmentResolver(new GiphyAttachmentResolver());
41
- chatBackend.registerAttachmentResolver(new YouTubeAttachmentResolver());
42
- chatBackend.registerAttachmentResolver(new TweetAttachmentResolver());
43
- chatBackend.registerAttachmentResolver(new UrlAttachmentResolver(chatBackend));
44
- }
45
- static configure(options) {
46
- return {
47
- ngModule: BantaSdkModule,
48
- providers: [
49
- {
50
- provide: BANTA_SDK_OPTIONS,
51
- useValue: options || {}
52
- },
53
- { provide: ChatBackendBase, useClass: ChatBackend }
54
- ]
55
- };
56
- }
57
- }
58
- BantaSdkModule.decorators = [
59
- { type: NgModule, args: [{
60
- imports: [
61
- CommonModule,
62
- FormsModule,
63
- BantaCommonModule,
64
- CommentsModule,
65
- ChatModule,
66
- EmojiModule,
67
- MatIconModule,
68
- MatButtonModule,
69
- MatTooltipModule,
70
- MatMenuModule,
71
- MatDialogModule,
72
- MatFormFieldModule,
73
- MatInputModule,
74
- MatProgressSpinnerModule,
75
- MatSnackBarModule,
76
- OverlayModule,
77
- PortalModule
78
- ],
79
- declarations: [
80
- BantaComponent,
81
- BantaLogoComponent,
82
- LiveMessageComponent
83
- ],
84
- exports: [
85
- BantaComponent,
86
- BantaLogoComponent,
87
- LiveMessageComponent,
88
- BantaCommonModule,
89
- ChatModule,
90
- CommentsModule,
91
- EmojiModule
92
- ]
93
- },] }
94
- ];
95
- BantaSdkModule.ctorParameters = () => [
96
- { type: ChatBackendBase }
97
- ];
98
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFudGEtc2RrLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3Nkay9zcmMvbGliL2JhbnRhLXNkay5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUF1QixRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUM1QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDdEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzVELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDM0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFN0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDckQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2hGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzlELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBc0M5RCxNQUFNLE9BQU8sY0FBYztJQUN2QixZQUNJLFdBQTRCO1FBRTVCLElBQUksT0FBTyxNQUFNLEtBQUssV0FBVyxFQUFFO1lBQy9CLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLHVEQUF1RCxDQUFDLEVBQUU7Z0JBQ2xGLElBQUksTUFBTSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQzlDLE1BQU0sQ0FBQyxHQUFHLEdBQUcseUNBQXlDLENBQUM7Z0JBQ3ZELE1BQU0sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO2dCQUNwQixRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUNyQztTQUNKO1FBRUQsV0FBVyxDQUFDLHlCQUF5QixDQUFDLElBQUksb0JBQW9CLEVBQUUsQ0FBQyxDQUFDO1FBQ2xFLFdBQVcsQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLHVCQUF1QixFQUFFLENBQUMsQ0FBQztRQUN0RSxXQUFXLENBQUMsMEJBQTBCLENBQUMsSUFBSSx5QkFBeUIsRUFBRSxDQUFDLENBQUM7UUFDeEUsV0FBVyxDQUFDLDBCQUEwQixDQUFDLElBQUksdUJBQXVCLEVBQUUsQ0FBQyxDQUFDO1FBQ3RFLFdBQVcsQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLHFCQUFxQixDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDbkYsQ0FBQztJQUVELE1BQU0sQ0FBQyxTQUFTLENBQUMsT0FBb0I7UUFDakMsT0FBTztZQUNILFFBQVEsRUFBRSxjQUFjO1lBQ3hCLFNBQVMsRUFBRTtnQkFDUDtvQkFDSSxPQUFPLEVBQUUsaUJBQWlCO29CQUMxQixRQUFRLEVBQUUsT0FBTyxJQUFJLEVBQUU7aUJBQzFCO2dCQUNELEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFO2FBQ3REO1NBQ0osQ0FBQTtJQUNMLENBQUM7OztZQW5FSixRQUFRLFNBQUM7Z0JBQ04sT0FBTyxFQUFFO29CQUNMLFlBQVk7b0JBQ1osV0FBVztvQkFDWCxpQkFBaUI7b0JBQ2pCLGNBQWM7b0JBQ2QsVUFBVTtvQkFDVixXQUFXO29CQUVYLGFBQWE7b0JBQ2IsZUFBZTtvQkFDZixnQkFBZ0I7b0JBQ2hCLGFBQWE7b0JBQ2IsZUFBZTtvQkFDZixrQkFBa0I7b0JBQ2xCLGNBQWM7b0JBQ2Qsd0JBQXdCO29CQUN4QixpQkFBaUI7b0JBQ2pCLGFBQWE7b0JBQ2IsWUFBWTtpQkFDZjtnQkFDRCxZQUFZLEVBQUU7b0JBQ1YsY0FBYztvQkFDZCxrQkFBa0I7b0JBQ2xCLG9CQUFvQjtpQkFDdkI7Z0JBQ0QsT0FBTyxFQUFFO29CQUNMLGNBQWM7b0JBQ2Qsa0JBQWtCO29CQUNsQixvQkFBb0I7b0JBQ3BCLGlCQUFpQjtvQkFDakIsVUFBVTtvQkFDVixjQUFjO29CQUNkLFdBQVc7aUJBQ2Q7YUFDSjs7O1lBM0NRLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNb2R1bGVXaXRoUHJvdmlkZXJzLCBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21tZW50c01vZHVsZSB9IGZyb20gJy4vY29tbWVudHMnO1xyXG5pbXBvcnQgeyBDaGF0TW9kdWxlIH0gZnJvbSAnLi9jaGF0JztcclxuaW1wb3J0IHsgRW1vamlNb2R1bGUgfSBmcm9tICcuL2Vtb2ppJztcclxuaW1wb3J0IHsgQmFudGFDb21wb25lbnQgfSBmcm9tICcuL2JhbnRhL2JhbnRhLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEJhbnRhTG9nb0NvbXBvbmVudCB9IGZyb20gJy4vYmFudGEtbG9nby5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQmFudGFDb21tb25Nb2R1bGUgfSBmcm9tICcuL2NvbW1vbi9jb21tb24ubW9kdWxlJztcclxuaW1wb3J0IHsgTGl2ZU1lc3NhZ2VDb21wb25lbnQgfSBmcm9tICcuL2xpdmUtbWVzc2FnZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uXCI7XHJcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvblwiO1xyXG5pbXBvcnQgeyBNYXRUb29sdGlwTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXBcIjtcclxuaW1wb3J0IHsgTWF0TWVudU1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9tZW51XCI7XHJcbmltcG9ydCB7IE1hdERpYWxvZ01vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2dcIjtcclxuaW1wb3J0IHsgTWF0U25hY2tCYXJNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvc25hY2stYmFyXCI7XHJcbmltcG9ydCB7IE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkXCI7XHJcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2lucHV0XCI7XHJcbmltcG9ydCB7IE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9wcm9ncmVzcy1zcGlubmVyXCI7XHJcbmltcG9ydCB7IENoYXRCYWNrZW5kIH0gZnJvbSAnLi9jaGF0LWJhY2tlbmQnO1xyXG5pbXBvcnQgeyBTZGtPcHRpb25zIH0gZnJvbSAnLi9zZGstb3B0aW9ucyc7XHJcbmltcG9ydCB7IEJBTlRBX1NES19PUFRJT05TIH0gZnJvbSAnLi9zZGstb3B0aW9ucyc7XHJcbmltcG9ydCB7IENoYXRCYWNrZW5kQmFzZSB9IGZyb20gJy4vY2hhdC1iYWNrZW5kLWJhc2UnO1xyXG5pbXBvcnQgeyBPdmVybGF5TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xyXG5pbXBvcnQgeyBQb3J0YWxNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcclxuaW1wb3J0IHsgVXJsQXR0YWNobWVudFJlc29sdmVyLCBVcmxBdHRhY2htZW50U2NyYXBlciB9IGZyb20gJy4vdXJsLWF0dGFjaG1lbnRzJztcclxuaW1wb3J0IHsgWW91VHViZUF0dGFjaG1lbnRSZXNvbHZlciB9IGZyb20gJy4veW91dHViZS1hdHRhY2htZW50cyc7XHJcbmltcG9ydCB7IEdpcGh5QXR0YWNobWVudFJlc29sdmVyIH0gZnJvbSAnLi9naXBoeS1hdHRhY2htZW50cyc7XHJcbmltcG9ydCB7IFR3ZWV0QXR0YWNobWVudFJlc29sdmVyIH0gZnJvbSAnLi90d2VldC1hdHRhY2htZW50cyc7XHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gICAgaW1wb3J0czogW1xyXG4gICAgICAgIENvbW1vbk1vZHVsZSxcclxuICAgICAgICBGb3Jtc01vZHVsZSxcclxuICAgICAgICBCYW50YUNvbW1vbk1vZHVsZSxcclxuICAgICAgICBDb21tZW50c01vZHVsZSxcclxuICAgICAgICBDaGF0TW9kdWxlLFxyXG4gICAgICAgIEVtb2ppTW9kdWxlLFxyXG4gICAgICAgIFxyXG4gICAgICAgIE1hdEljb25Nb2R1bGUsXHJcbiAgICAgICAgTWF0QnV0dG9uTW9kdWxlLFxyXG4gICAgICAgIE1hdFRvb2x0aXBNb2R1bGUsXHJcbiAgICAgICAgTWF0TWVudU1vZHVsZSxcclxuICAgICAgICBNYXREaWFsb2dNb2R1bGUsXHJcbiAgICAgICAgTWF0Rm9ybUZpZWxkTW9kdWxlLFxyXG4gICAgICAgIE1hdElucHV0TW9kdWxlLFxyXG4gICAgICAgIE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZSxcclxuICAgICAgICBNYXRTbmFja0Jhck1vZHVsZSxcclxuICAgICAgICBPdmVybGF5TW9kdWxlLFxyXG4gICAgICAgIFBvcnRhbE1vZHVsZVxyXG4gICAgXSxcclxuICAgIGRlY2xhcmF0aW9uczogW1xyXG4gICAgICAgIEJhbnRhQ29tcG9uZW50LFxyXG4gICAgICAgIEJhbnRhTG9nb0NvbXBvbmVudCxcclxuICAgICAgICBMaXZlTWVzc2FnZUNvbXBvbmVudFxyXG4gICAgXSxcclxuICAgIGV4cG9ydHM6IFtcclxuICAgICAgICBCYW50YUNvbXBvbmVudCxcclxuICAgICAgICBCYW50YUxvZ29Db21wb25lbnQsXHJcbiAgICAgICAgTGl2ZU1lc3NhZ2VDb21wb25lbnQsXHJcbiAgICAgICAgQmFudGFDb21tb25Nb2R1bGUsXHJcbiAgICAgICAgQ2hhdE1vZHVsZSxcclxuICAgICAgICBDb21tZW50c01vZHVsZSxcclxuICAgICAgICBFbW9qaU1vZHVsZVxyXG4gICAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQmFudGFTZGtNb2R1bGUge1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgY2hhdEJhY2tlbmQ6IENoYXRCYWNrZW5kQmFzZVxyXG4gICAgKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgIGlmICghZG9jdW1lbnQucXVlcnlTZWxlY3Rvcignc2NyaXB0W3NyYz1cImh0dHBzOi8vcGxhdGZvcm0udHdpdHRlci5jb20vd2lkZ2V0cy5qc1wiXScpKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XHJcbiAgICAgICAgICAgICAgICBzY3JpcHQuc3JjID0gJ2h0dHBzOi8vcGxhdGZvcm0udHdpdHRlci5jb20vd2lkZ2V0cy5qcyc7XHJcbiAgICAgICAgICAgICAgICBzY3JpcHQuYXN5bmMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzY3JpcHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjaGF0QmFja2VuZC5yZWdpc3RlckF0dGFjaG1lbnRTY3JhcGVyKG5ldyBVcmxBdHRhY2htZW50U2NyYXBlcigpKTtcclxuICAgICAgICBjaGF0QmFja2VuZC5yZWdpc3RlckF0dGFjaG1lbnRSZXNvbHZlcihuZXcgR2lwaHlBdHRhY2htZW50UmVzb2x2ZXIoKSk7XHJcbiAgICAgICAgY2hhdEJhY2tlbmQucmVnaXN0ZXJBdHRhY2htZW50UmVzb2x2ZXIobmV3IFlvdVR1YmVBdHRhY2htZW50UmVzb2x2ZXIoKSk7XHJcbiAgICAgICAgY2hhdEJhY2tlbmQucmVnaXN0ZXJBdHRhY2htZW50UmVzb2x2ZXIobmV3IFR3ZWV0QXR0YWNobWVudFJlc29sdmVyKCkpO1xyXG4gICAgICAgIGNoYXRCYWNrZW5kLnJlZ2lzdGVyQXR0YWNobWVudFJlc29sdmVyKG5ldyBVcmxBdHRhY2htZW50UmVzb2x2ZXIoY2hhdEJhY2tlbmQpKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgc3RhdGljIGNvbmZpZ3VyZShvcHRpb25zPzogU2RrT3B0aW9ucyk6IE1vZHVsZVdpdGhQcm92aWRlcnM8QmFudGFTZGtNb2R1bGU+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBuZ01vZHVsZTogQmFudGFTZGtNb2R1bGUsXHJcbiAgICAgICAgICAgIHByb3ZpZGVyczogW1xyXG4gICAgICAgICAgICAgICAgeyBcclxuICAgICAgICAgICAgICAgICAgICBwcm92aWRlOiBCQU5UQV9TREtfT1BUSU9OUywgXHJcbiAgICAgICAgICAgICAgICAgICAgdXNlVmFsdWU6IG9wdGlvbnMgfHwge31cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB7IHByb3ZpZGU6IENoYXRCYWNrZW5kQmFzZSwgdXNlQ2xhc3M6IENoYXRCYWNrZW5kIH1cclxuICAgICAgICAgICAgXVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufSJdfQ==
@@ -1,175 +0,0 @@
1
- import { __awaiter } from "tslib";
2
- import { Component, Input, Output, ViewChild, ElementRef } from "@angular/core";
3
- import { Subject, Subscription } from 'rxjs';
4
- import { ChatViewComponent } from '../chat-view/chat-view.component';
5
- import { ChatBackendBase } from "../../chat-backend-base";
6
- /**
7
- * Chat component
8
- */
9
- export class BantaChatComponent {
10
- constructor(backend) {
11
- this.backend = backend;
12
- this._subs = new Subscription();
13
- this.user = null;
14
- this.signInLabel = 'Sign In';
15
- this.sendLabel = 'Send';
16
- this.permissionDeniedLabel = 'Send';
17
- this.messageFieldPlaceholder = 'Chat';
18
- this.emptyLabel = 'Be the first to chat';
19
- this._selected = new Subject();
20
- this._selected$ = this._selected.asObservable();
21
- this._reported = new Subject();
22
- this._reported$ = this._reported.asObservable();
23
- this._upvoted = new Subject();
24
- this._upvoted$ = this._upvoted.asObservable();
25
- this._userSelected = new Subject();
26
- this._userSelected$ = this._userSelected.asObservable();
27
- this._permissionDeniedError = new Subject();
28
- this._permissionDeniedError$ = this._permissionDeniedError.asObservable();
29
- this._signInSelected = new Subject();
30
- this._signInSelected$ = this._signInSelected.asObservable();
31
- this._received = new Subject();
32
- this._received$ = this._received.asObservable();
33
- this.showEmojiPanel = false;
34
- this.newMessage = {};
35
- }
36
- ngOnInit() {
37
- this._subs.add(this.backend.userChanged.subscribe(user => this.user = user));
38
- }
39
- ngOnDestroy() {
40
- this._subs.unsubscribe();
41
- }
42
- get source() {
43
- return this._source;
44
- }
45
- set source(value) {
46
- this._source = value;
47
- }
48
- get topicID() {
49
- return this._source.identifier;
50
- }
51
- set topicID(value) {
52
- this.setSourceFromTopicID(value);
53
- }
54
- setSourceFromTopicID(topicID) {
55
- return __awaiter(this, void 0, void 0, function* () {
56
- if (this._source && this._source.close)
57
- this._source.close();
58
- this._source = null;
59
- this._source = yield this.backend.getSourceForTopic(topicID);
60
- });
61
- }
62
- get selected() { return this._selected$; }
63
- get reported() { return this._reported$; }
64
- get upvoted() { return this._upvoted$; }
65
- get userSelected() { return this._userSelected$; }
66
- get permissionDeniedError() { return this._permissionDeniedError$; }
67
- get signInSelected() { return this._signInSelected$; }
68
- get received() { return this._received$; }
69
- onReceived(message) {
70
- this._received.next(message);
71
- }
72
- showSignIn() {
73
- this._signInSelected.next();
74
- }
75
- sendPermissionError(message) {
76
- this._permissionDeniedError.next(message);
77
- }
78
- insertEmoji(emoji) {
79
- let message = this.newMessage.message || '';
80
- this.newMessage.message = message + emoji;
81
- }
82
- onKeyDown(event) {
83
- // TODO
84
- }
85
- jumpToMessage(message) {
86
- if (this.chatView)
87
- this.chatView.jumpTo(message);
88
- }
89
- select(message) {
90
- this._selected.next(message);
91
- }
92
- selectUser(message) {
93
- this._userSelected.next(message);
94
- }
95
- report(message) {
96
- this._reported.next(message);
97
- }
98
- upvote(message) {
99
- return __awaiter(this, void 0, void 0, function* () {
100
- yield this.source.likeMessage(message.id);
101
- this._upvoted.next(message);
102
- });
103
- }
104
- get canChat() {
105
- if (!this.user)
106
- return false;
107
- // TODO
108
- // if (!this.user.permissions)
109
- // return true;
110
- // if (!this.user.permissions.canChat)
111
- // return true;
112
- // return this.user.permissions?.canChat(this.source);
113
- return true;
114
- }
115
- sendMessage() {
116
- var _a;
117
- return __awaiter(this, void 0, void 0, function* () {
118
- if (!this.source)
119
- return;
120
- let text = (this.newMessage.message || '').trim();
121
- this.newMessage.message = '';
122
- if (text === '')
123
- return;
124
- let message = {
125
- user: null,
126
- sentAt: Date.now(),
127
- likes: 0,
128
- url: typeof window !== 'undefined' ? location.href : undefined,
129
- message: text
130
- };
131
- try {
132
- const intercept = yield ((_a = this.shouldInterceptMessageSend) === null || _a === void 0 ? void 0 : _a.call(this, message, this.source));
133
- if (!intercept) {
134
- yield this.source.send(message);
135
- }
136
- this.chatView.scrollToLatest();
137
- this.inputElementRef.nativeElement.focus();
138
- }
139
- catch (e) {
140
- console.error(`Failed to send message: `, message);
141
- console.error(e);
142
- }
143
- });
144
- }
145
- }
146
- BantaChatComponent.decorators = [
147
- { type: Component, args: [{
148
- selector: 'banta-chat',
149
- template: "<banta-chat-view \r\n #chatView\r\n [source]=\"source\"\r\n [emptyLabel]=\"emptyLabel\"\r\n (upvoted)=\"upvote($event)\"\r\n (reported)=\"report($event)\"\r\n (selected)=\"select($event)\"\r\n (received)=\"onReceived($event)\"\r\n (userSelected)=\"selectUser($event)\"\r\n ></banta-chat-view>\r\n\r\n<form class=\"new-message\" (submit)=\"sendMessage()\">\r\n \r\n <div class=\"entry-container\">\r\n <input\r\n #input\r\n type=\"text\"\r\n name=\"message\" \r\n autocomplete=\"off\"\r\n enterkeyhint=\"send\"\r\n [placeholder]=\"messageFieldPlaceholder\"\r\n (keydown)=\"onKeyDown($event)\"\r\n [(ngModel)]=\"newMessage.message\" />\r\n \r\n <emoji-selector-button\r\n (selected)=\"insertEmoji($event)\"\r\n overlayY=\"bottom\"\r\n overlayX=\"end\"\r\n originY=\"top\"\r\n ></emoji-selector-button>\r\n </div>\r\n\r\n <div class=\"actions\">\r\n\r\n <ng-container *ngIf=\"!user\">\r\n <button type=\"button\" (click)=\"showSignIn()\" mat-raised-button color=\"primary\">{{signInLabel}}</button>\r\n </ng-container>\r\n <ng-container *ngIf=\"user\">\r\n <button *ngIf=\"canChat\" [disabled]=\"!newMessage.message\" mat-raised-button color=\"primary\">{{sendLabel}}</button>\r\n <button *ngIf=\"!canChat\" type=\"button\" (click)=\"sendPermissionError()\" mat-raised-button color=\"primary\">{{permissionDeniedLabel}}</button>\r\n </ng-container>\r\n </div>\r\n</form>",
150
- styles: [":host{flex-direction:column;border-radius:5px;padding:10px;font-size:10pt;min-height:1px}.entry-container,:host{display:flex;flex-grow:1}.entry-container{flex-direction:row;position:relative}.entry-container emoji-selector-button{position:absolute;right:0;top:.15em}.entry-container input{height:2.6em;font-size:12pt;padding-left:1em}.entry-container input:-webkit-autofill,.entry-container input:-webkit-autofill:focus,.entry-container input:-webkit-autofill:hover{outline:1px solid #9da302;-webkit-text-fill-color:#9da302;-webkit-box-shadow:0 0 0 1000px #211e07 inset;-webkit-transition:background-color 5000s ease-in-out 0s;transition:background-color 5000s ease-in-out 0s;caret-color:#9da302}.entry-container emoji-selector-panel{pointer-events:none;opacity:0;position:absolute;bottom:3.5em;right:0}.entry-container emoji-selector-panel.visible{opacity:1;pointer-events:auto}form{display:flex;padding:.5em 0;align-items:center}form textarea{font-size:14pt;background:#000;color:#fff;border:1px solid #333;min-height:6em;width:100%}form input[type=text]{background:#fff;color:#000;border:1px solid #ccc;width:100%;height:2.5em}form .actions{margin-left:1em}form button{display:block;margin:0 0 0 auto}:host-context(.mat-dark-theme) form input[type=text]{background:#000;color:#fff;border:1px solid #333}"]
151
- },] }
152
- ];
153
- BantaChatComponent.ctorParameters = () => [
154
- { type: ChatBackendBase }
155
- ];
156
- BantaChatComponent.propDecorators = {
157
- shouldInterceptMessageSend: [{ type: Input }],
158
- source: [{ type: Input }],
159
- topicID: [{ type: Input }],
160
- signInLabel: [{ type: Input }],
161
- sendLabel: [{ type: Input }],
162
- permissionDeniedLabel: [{ type: Input }],
163
- messageFieldPlaceholder: [{ type: Input }],
164
- emptyLabel: [{ type: Input }],
165
- selected: [{ type: Output }],
166
- reported: [{ type: Output }],
167
- upvoted: [{ type: Output }],
168
- userSelected: [{ type: Output }],
169
- permissionDeniedError: [{ type: Output }],
170
- signInSelected: [{ type: Output }],
171
- received: [{ type: Output }],
172
- chatView: [{ type: ViewChild, args: ['chatView',] }],
173
- inputElementRef: [{ type: ViewChild, args: ['input',] }]
174
- };
175
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFudGEtY2hhdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZGsvc3JjL2xpYi9jaGF0L2JhbnRhLWNoYXQvYmFudGEtY2hhdC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxPQUFPLEVBQWMsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBR3pELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUcxRDs7R0FFRztBQU1ILE1BQU0sT0FBTyxrQkFBa0I7SUFDM0IsWUFDWSxPQUF5QjtRQUF6QixZQUFPLEdBQVAsT0FBTyxDQUFrQjtRQUs3QixVQUFLLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNuQyxTQUFJLEdBQVUsSUFBSSxDQUFDO1FBc0NWLGdCQUFXLEdBQUcsU0FBUyxDQUFDO1FBQ3hCLGNBQVMsR0FBRyxNQUFNLENBQUM7UUFDbkIsMEJBQXFCLEdBQUcsTUFBTSxDQUFDO1FBQy9CLDRCQUF1QixHQUFHLE1BQU0sQ0FBQztRQUNqQyxlQUFVLEdBQUcsc0JBQXNCLENBQUM7UUFFckMsY0FBUyxHQUFHLElBQUksT0FBTyxFQUFlLENBQUM7UUFDdkMsZUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDM0MsY0FBUyxHQUFHLElBQUksT0FBTyxFQUFlLENBQUM7UUFDdkMsZUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDM0MsYUFBUSxHQUFHLElBQUksT0FBTyxFQUFlLENBQUM7UUFDdEMsY0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDekMsa0JBQWEsR0FBRyxJQUFJLE9BQU8sRUFBZSxDQUFDO1FBQzNDLG1CQUFjLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNuRCwyQkFBc0IsR0FBRyxJQUFJLE9BQU8sRUFBVSxDQUFDO1FBQy9DLDRCQUF1QixHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNyRSxvQkFBZSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFDdEMscUJBQWdCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN2RCxjQUFTLEdBQUcsSUFBSSxPQUFPLEVBQWUsQ0FBQztRQUN2QyxlQUFVLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQWNuRCxtQkFBYyxHQUFHLEtBQUssQ0FBQztRQTZEdkIsZUFBVSxHQUFvQixFQUFFLENBQUM7SUF4SWpDLENBQUM7SUFTRCxRQUFRO1FBQ0osSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2pGLENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQsSUFDSSxNQUFNO1FBQ04sT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxJQUFJLE1BQU0sQ0FBQyxLQUFLO1FBQ1osSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7SUFDekIsQ0FBQztJQUVELElBQ0ksT0FBTztRQUNQLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUM7SUFDbkMsQ0FBQztJQUVELElBQUksT0FBTyxDQUFDLEtBQUs7UUFDYixJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVhLG9CQUFvQixDQUFDLE9BQWdCOztZQUMvQyxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLO2dCQUNsQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2pFLENBQUM7S0FBQTtJQXVCRCxJQUFjLFFBQVEsS0FBSyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBQ3BELElBQWMsUUFBUSxLQUFLLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFDcEQsSUFBYyxPQUFPLEtBQUssT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUNsRCxJQUFjLFlBQVksS0FBSyxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO0lBQzVELElBQWMscUJBQXFCLEtBQUssT0FBTyxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDO0lBQzlFLElBQWMsY0FBYyxLQUFLLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztJQUNoRSxJQUFjLFFBQVEsS0FBSyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBRXBELFVBQVUsQ0FBQyxPQUFvQjtRQUMzQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBSUQsVUFBVTtRQUNOLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVELG1CQUFtQixDQUFDLE9BQWU7UUFDL0IsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQUs7UUFDYixJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUM7UUFFNUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEdBQUcsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUM5QyxDQUFDO0lBRUQsU0FBUyxDQUFDLEtBQXFCO1FBQzNCLE9BQU87SUFDWCxDQUFDO0lBS0QsYUFBYSxDQUFDLE9BQXFCO1FBQy9CLElBQUksSUFBSSxDQUFDLFFBQVE7WUFDYixJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsTUFBTSxDQUFDLE9BQXFCO1FBQ3hCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxVQUFVLENBQUMsT0FBcUI7UUFDNUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELE1BQU0sQ0FBQyxPQUFxQjtRQUN4QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUssTUFBTSxDQUFDLE9BQXFCOztZQUM5QixNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMxQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNoQyxDQUFDO0tBQUE7SUFFRCxJQUFJLE9BQU87UUFDUCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUk7WUFDVixPQUFPLEtBQUssQ0FBQztRQUVqQixPQUFPO1FBQ1AsOEJBQThCO1FBQzlCLG1CQUFtQjtRQUVuQixzQ0FBc0M7UUFDdEMsbUJBQW1CO1FBRW5CLHNEQUFzRDtRQUV0RCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBSUssV0FBVzs7O1lBQ2IsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNO2dCQUNaLE9BQU87WUFFWCxJQUFJLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2xELElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUU3QixJQUFJLElBQUksS0FBSyxFQUFFO2dCQUNYLE9BQU87WUFFWCxJQUFJLE9BQU8sR0FBaUI7Z0JBQ3hCLElBQUksRUFBRSxJQUFJO2dCQUNWLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFO2dCQUNsQixLQUFLLEVBQUUsQ0FBQztnQkFDUixHQUFHLEVBQUUsT0FBTyxNQUFNLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTO2dCQUM5RCxPQUFPLEVBQUUsSUFBSTthQUNoQixDQUFDO1lBRUYsSUFBSTtnQkFDQSxNQUFNLFNBQVMsR0FBRyxhQUFNLElBQUksQ0FBQywwQkFBMEIsK0NBQS9CLElBQUksRUFBOEIsT0FBTyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUMsQ0FBQztnQkFDaEYsSUFBSSxDQUFDLFNBQVMsRUFBRTtvQkFDWixNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2lCQUNuQztnQkFFRCxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUMvQixJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQzthQUM5QztZQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUNSLE9BQU8sQ0FBQyxLQUFLLENBQUMsMEJBQTBCLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQ25ELE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDcEI7O0tBQ0o7OztZQWpMSixTQUFTLFNBQUM7Z0JBQ1AsUUFBUSxFQUFFLFlBQVk7Z0JBQ3RCLGtuREFBMEM7O2FBRTdDOzs7WUFWUSxlQUFlOzs7eUNBcUJuQixLQUFLO3FCQVdMLEtBQUs7c0JBU0wsS0FBSzswQkFnQkwsS0FBSzt3QkFDTCxLQUFLO29DQUNMLEtBQUs7c0NBQ0wsS0FBSzt5QkFDTCxLQUFLO3VCQWlCTCxNQUFNO3VCQUNOLE1BQU07c0JBQ04sTUFBTTsyQkFDTixNQUFNO29DQUNOLE1BQU07NkJBQ04sTUFBTTt1QkFDTixNQUFNO3VCQTBCTixTQUFTLFNBQUMsVUFBVTs4QkFDcEIsU0FBUyxTQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIFZpZXdDaGlsZCwgRWxlbWVudFJlZiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IFN1YmplY3QsIE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5cclxuaW1wb3J0IHsgVXNlciwgQ2hhdE1lc3NhZ2UsIE5ld01lc3NhZ2VGb3JtIH0gZnJvbSAnQGJhbnRhL2NvbW1vbic7XHJcbmltcG9ydCB7IENoYXRWaWV3Q29tcG9uZW50IH0gZnJvbSAnLi4vY2hhdC12aWV3L2NoYXQtdmlldy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDaGF0QmFja2VuZEJhc2UgfSBmcm9tIFwiLi4vLi4vY2hhdC1iYWNrZW5kLWJhc2VcIjtcclxuaW1wb3J0IHsgQ2hhdFNvdXJjZUJhc2UgfSBmcm9tIFwiLi4vLi4vY2hhdC1zb3VyY2UtYmFzZVwiO1xyXG5cclxuLyoqXHJcbiAqIENoYXQgY29tcG9uZW50XHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnYmFudGEtY2hhdCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vYmFudGEtY2hhdC5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9iYW50YS1jaGF0LmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIEJhbnRhQ2hhdENvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIGJhY2tlbmQgOiBDaGF0QmFja2VuZEJhc2VcclxuICAgICkge1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3NvdXJjZSA6IENoYXRTb3VyY2VCYXNlO1xyXG4gICAgcHJpdmF0ZSBfc3VicyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcclxuICAgIHVzZXIgOiBVc2VyID0gbnVsbDtcclxuXHJcbiAgICBASW5wdXQoKSBzaG91bGRJbnRlcmNlcHRNZXNzYWdlU2VuZD86IChtZXNzYWdlOiBDaGF0TWVzc2FnZSwgc291cmNlOiBDaGF0U291cmNlQmFzZSkgPT4gYm9vbGVhbiB8IFByb21pc2U8Ym9vbGVhbj47XHJcblxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMuX3N1YnMuYWRkKHRoaXMuYmFja2VuZC51c2VyQ2hhbmdlZC5zdWJzY3JpYmUodXNlciA9PiB0aGlzLnVzZXIgPSB1c2VyKSk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICAgICAgdGhpcy5fc3Vicy51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBnZXQgc291cmNlKCkgOiBDaGF0U291cmNlQmFzZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NvdXJjZTtcclxuICAgIH1cclxuXHJcbiAgICBzZXQgc291cmNlKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5fc291cmNlID0gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIGdldCB0b3BpY0lEKCkgOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zb3VyY2UuaWRlbnRpZmllcjtcclxuICAgIH1cclxuXHJcbiAgICBzZXQgdG9waWNJRCh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuc2V0U291cmNlRnJvbVRvcGljSUQodmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgc2V0U291cmNlRnJvbVRvcGljSUQodG9waWNJRCA6IHN0cmluZykge1xyXG4gICAgICAgIGlmICh0aGlzLl9zb3VyY2UgJiYgdGhpcy5fc291cmNlLmNsb3NlKVxyXG4gICAgICAgICAgICB0aGlzLl9zb3VyY2UuY2xvc2UoKTtcclxuICAgICAgICB0aGlzLl9zb3VyY2UgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuX3NvdXJjZSA9IGF3YWl0IHRoaXMuYmFja2VuZC5nZXRTb3VyY2VGb3JUb3BpYyh0b3BpY0lEKTtcclxuICAgIH1cclxuXHJcbiAgICBASW5wdXQoKSBzaWduSW5MYWJlbCA9ICdTaWduIEluJztcclxuICAgIEBJbnB1dCgpIHNlbmRMYWJlbCA9ICdTZW5kJztcclxuICAgIEBJbnB1dCgpIHBlcm1pc3Npb25EZW5pZWRMYWJlbCA9ICdTZW5kJztcclxuICAgIEBJbnB1dCgpIG1lc3NhZ2VGaWVsZFBsYWNlaG9sZGVyID0gJ0NoYXQnO1xyXG4gICAgQElucHV0KCkgZW1wdHlMYWJlbCA9ICdCZSB0aGUgZmlyc3QgdG8gY2hhdCc7XHJcblxyXG4gICAgcHJpdmF0ZSBfc2VsZWN0ZWQgPSBuZXcgU3ViamVjdDxDaGF0TWVzc2FnZT4oKTtcclxuICAgIHByaXZhdGUgX3NlbGVjdGVkJCA9IHRoaXMuX3NlbGVjdGVkLmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgcHJpdmF0ZSBfcmVwb3J0ZWQgPSBuZXcgU3ViamVjdDxDaGF0TWVzc2FnZT4oKTtcclxuICAgIHByaXZhdGUgX3JlcG9ydGVkJCA9IHRoaXMuX3JlcG9ydGVkLmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgcHJpdmF0ZSBfdXB2b3RlZCA9IG5ldyBTdWJqZWN0PENoYXRNZXNzYWdlPigpO1xyXG4gICAgcHJpdmF0ZSBfdXB2b3RlZCQgPSB0aGlzLl91cHZvdGVkLmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgcHJpdmF0ZSBfdXNlclNlbGVjdGVkID0gbmV3IFN1YmplY3Q8Q2hhdE1lc3NhZ2U+KCk7XHJcbiAgICBwcml2YXRlIF91c2VyU2VsZWN0ZWQkID0gdGhpcy5fdXNlclNlbGVjdGVkLmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgcHJpdmF0ZSBfcGVybWlzc2lvbkRlbmllZEVycm9yID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xyXG4gICAgcHJpdmF0ZSBfcGVybWlzc2lvbkRlbmllZEVycm9yJCA9IHRoaXMuX3Blcm1pc3Npb25EZW5pZWRFcnJvci5hc09ic2VydmFibGUoKTtcclxuICAgIHByaXZhdGUgX3NpZ25JblNlbGVjdGVkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICAgIHByaXZhdGUgX3NpZ25JblNlbGVjdGVkJCA9IHRoaXMuX3NpZ25JblNlbGVjdGVkLmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgcHJpdmF0ZSBfcmVjZWl2ZWQgPSBuZXcgU3ViamVjdDxDaGF0TWVzc2FnZT4oKTtcclxuICAgIHByaXZhdGUgX3JlY2VpdmVkJCA9IHRoaXMuX3JlY2VpdmVkLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICAgIEBPdXRwdXQoKSBnZXQgc2VsZWN0ZWQoKSB7IHJldHVybiB0aGlzLl9zZWxlY3RlZCQ7IH1cclxuICAgIEBPdXRwdXQoKSBnZXQgcmVwb3J0ZWQoKSB7IHJldHVybiB0aGlzLl9yZXBvcnRlZCQ7IH1cclxuICAgIEBPdXRwdXQoKSBnZXQgdXB2b3RlZCgpIHsgcmV0dXJuIHRoaXMuX3Vwdm90ZWQkOyB9XHJcbiAgICBAT3V0cHV0KCkgZ2V0IHVzZXJTZWxlY3RlZCgpIHsgcmV0dXJuIHRoaXMuX3VzZXJTZWxlY3RlZCQ7IH1cclxuICAgIEBPdXRwdXQoKSBnZXQgcGVybWlzc2lvbkRlbmllZEVycm9yKCkgeyByZXR1cm4gdGhpcy5fcGVybWlzc2lvbkRlbmllZEVycm9yJDsgfVxyXG4gICAgQE91dHB1dCgpIGdldCBzaWduSW5TZWxlY3RlZCgpIHsgcmV0dXJuIHRoaXMuX3NpZ25JblNlbGVjdGVkJDsgfVxyXG4gICAgQE91dHB1dCgpIGdldCByZWNlaXZlZCgpIHsgcmV0dXJuIHRoaXMuX3JlY2VpdmVkJDsgfVxyXG5cclxuICAgIG9uUmVjZWl2ZWQobWVzc2FnZTogQ2hhdE1lc3NhZ2UpIHtcclxuICAgICAgICB0aGlzLl9yZWNlaXZlZC5uZXh0KG1lc3NhZ2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHNob3dFbW9qaVBhbmVsID0gZmFsc2U7XHJcblxyXG4gICAgc2hvd1NpZ25JbigpIHtcclxuICAgICAgICB0aGlzLl9zaWduSW5TZWxlY3RlZC5uZXh0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2VuZFBlcm1pc3Npb25FcnJvcihtZXNzYWdlOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLl9wZXJtaXNzaW9uRGVuaWVkRXJyb3IubmV4dChtZXNzYWdlKTtcclxuICAgIH1cclxuXHJcbiAgICBpbnNlcnRFbW9qaShlbW9qaSkge1xyXG4gICAgICAgIGxldCBtZXNzYWdlID0gdGhpcy5uZXdNZXNzYWdlLm1lc3NhZ2UgfHwgJyc7XHJcblxyXG4gICAgICAgIHRoaXMubmV3TWVzc2FnZS5tZXNzYWdlID0gbWVzc2FnZSArIGVtb2ppO1xyXG4gICAgfVxyXG5cclxuICAgIG9uS2V5RG93bihldmVudCA6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgICAgICAvLyBUT0RPXHJcbiAgICB9XHJcblxyXG4gICAgQFZpZXdDaGlsZCgnY2hhdFZpZXcnKSBjaGF0VmlldyA6IENoYXRWaWV3Q29tcG9uZW50O1xyXG4gICAgQFZpZXdDaGlsZCgnaW5wdXQnKSBpbnB1dEVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XHJcblxyXG4gICAganVtcFRvTWVzc2FnZShtZXNzYWdlIDogQ2hhdE1lc3NhZ2UpIHtcclxuICAgICAgICBpZiAodGhpcy5jaGF0VmlldylcclxuICAgICAgICAgICAgdGhpcy5jaGF0Vmlldy5qdW1wVG8obWVzc2FnZSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0KG1lc3NhZ2UgOiBDaGF0TWVzc2FnZSkge1xyXG4gICAgICAgIHRoaXMuX3NlbGVjdGVkLm5leHQobWVzc2FnZSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0VXNlcihtZXNzYWdlIDogQ2hhdE1lc3NhZ2UpIHtcclxuICAgICAgICB0aGlzLl91c2VyU2VsZWN0ZWQubmV4dChtZXNzYWdlKTtcclxuICAgIH1cclxuXHJcbiAgICByZXBvcnQobWVzc2FnZSA6IENoYXRNZXNzYWdlKSB7XHJcbiAgICAgICAgdGhpcy5fcmVwb3J0ZWQubmV4dChtZXNzYWdlKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyB1cHZvdGUobWVzc2FnZSA6IENoYXRNZXNzYWdlKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5zb3VyY2UubGlrZU1lc3NhZ2UobWVzc2FnZS5pZCk7XHJcbiAgICAgICAgdGhpcy5fdXB2b3RlZC5uZXh0KG1lc3NhZ2UpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBjYW5DaGF0KCkge1xyXG4gICAgICAgIGlmICghdGhpcy51c2VyKVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIC8vIFRPRE9cclxuICAgICAgICAvLyBpZiAoIXRoaXMudXNlci5wZXJtaXNzaW9ucylcclxuICAgICAgICAvLyAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgICAgIC8vIGlmICghdGhpcy51c2VyLnBlcm1pc3Npb25zLmNhbkNoYXQpXHJcbiAgICAgICAgLy8gICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgICAgICAvLyByZXR1cm4gdGhpcy51c2VyLnBlcm1pc3Npb25zPy5jYW5DaGF0KHRoaXMuc291cmNlKTtcclxuICAgICAgICBcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBuZXdNZXNzYWdlIDogTmV3TWVzc2FnZUZvcm0gPSB7fTtcclxuXHJcbiAgICBhc3luYyBzZW5kTWVzc2FnZSgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuc291cmNlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCB0ZXh0ID0gKHRoaXMubmV3TWVzc2FnZS5tZXNzYWdlIHx8ICcnKS50cmltKCk7XHJcbiAgICAgICAgdGhpcy5uZXdNZXNzYWdlLm1lc3NhZ2UgPSAnJztcclxuXHJcbiAgICAgICAgaWYgKHRleHQgPT09ICcnKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBtZXNzYWdlIDogQ2hhdE1lc3NhZ2UgPSB7XHJcbiAgICAgICAgICAgIHVzZXI6IG51bGwsXHJcbiAgICAgICAgICAgIHNlbnRBdDogRGF0ZS5ub3coKSxcclxuICAgICAgICAgICAgbGlrZXM6IDAsXHJcbiAgICAgICAgICAgIHVybDogdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyBsb2NhdGlvbi5ocmVmIDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICBtZXNzYWdlOiB0ZXh0XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgaW50ZXJjZXB0ID0gYXdhaXQgdGhpcy5zaG91bGRJbnRlcmNlcHRNZXNzYWdlU2VuZD8uKG1lc3NhZ2UsIHRoaXMuc291cmNlKTtcclxuICAgICAgICAgICAgaWYgKCFpbnRlcmNlcHQpIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc291cmNlLnNlbmQobWVzc2FnZSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuY2hhdFZpZXcuc2Nyb2xsVG9MYXRlc3QoKTtcclxuICAgICAgICAgICAgdGhpcy5pbnB1dEVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIHNlbmQgbWVzc2FnZTogYCwgbWVzc2FnZSk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiJdfQ==