@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.
- package/README.md +2 -2
- package/{esm2015/banta-sdk.js → esm2020/banta-sdk.mjs} +0 -0
- package/{esm2015/lib/attachment-scraper.js → esm2020/lib/attachment-scraper.mjs} +0 -0
- package/esm2020/lib/banta/banta.component.mjs +204 -0
- package/esm2020/lib/banta-logo.component.mjs +11 -0
- package/esm2020/lib/banta-sdk.module.mjs +144 -0
- package/esm2020/lib/chat/banta-chat/banta-chat.component.mjs +185 -0
- package/esm2020/lib/chat/chat-message/chat-message.component.mjs +62 -0
- package/esm2020/lib/chat/chat-view/chat-view.component.mjs +170 -0
- package/esm2020/lib/chat/chat.module.mjs +51 -0
- package/{esm2015/lib/chat/index.js → esm2020/lib/chat/index.mjs} +0 -0
- package/esm2020/lib/chat/live-chat-message.component.mjs +80 -0
- package/{esm2015/lib/chat-backend-base.js → esm2020/lib/chat-backend-base.mjs} +0 -0
- package/esm2020/lib/chat-backend.mjs +83 -0
- package/{esm2015/lib/chat-source-base.js → esm2020/lib/chat-source-base.mjs} +0 -0
- package/esm2020/lib/chat-source.mjs +169 -0
- package/esm2020/lib/comments/attachment-button/attachment-button.component.mjs +69 -0
- package/esm2020/lib/comments/attachment-scraper.directive.mjs +107 -0
- package/esm2020/lib/comments/banta-comments/banta-comments.component.mjs +666 -0
- package/esm2020/lib/comments/comment/comment.component.mjs +217 -0
- package/esm2020/lib/comments/comment-field/comment-field.component.mjs +377 -0
- package/esm2020/lib/comments/comment-sort/comment-sort.component.mjs +37 -0
- package/esm2020/lib/comments/comment-view/comment-view.component.mjs +379 -0
- package/esm2020/lib/comments/comments.module.mjs +111 -0
- package/{esm2015/lib/comments/index.js → esm2020/lib/comments/index.mjs} +0 -0
- package/esm2020/lib/comments/live-comment.component.mjs +80 -0
- package/esm2020/lib/comments/reply-send-options.directive.mjs +13 -0
- package/esm2020/lib/common/attachment/attachment.component.mjs +113 -0
- package/esm2020/lib/common/attachments/attachments.component.mjs +72 -0
- package/esm2020/lib/common/common.module.mjs +59 -0
- package/{esm2015/lib/common/index.js → esm2020/lib/common/index.mjs} +0 -0
- package/{esm2015/lib/common/lazy-connection.js → esm2020/lib/common/lazy-connection.mjs} +0 -0
- package/esm2020/lib/common/lightbox/lightbox.component.mjs +31 -0
- package/esm2020/lib/common/markdown-to-html.pipe.mjs +76 -0
- package/esm2020/lib/common/mention-linker.pipe.mjs +35 -0
- package/esm2020/lib/common/timestamp.component.mjs +113 -0
- package/esm2020/lib/common/trust-resource-url.pipe.mjs +22 -0
- package/esm2020/lib/emoji/emoji-selector-button.component.mjs +113 -0
- package/esm2020/lib/emoji/emoji-selector-panel/emoji-selector-panel.component.mjs +88 -0
- package/esm2020/lib/emoji/emoji.module.mjs +55 -0
- package/{esm2015/lib/emoji/emojis.js → esm2020/lib/emoji/emojis.mjs} +0 -0
- package/{esm2015/lib/emoji/index.js → esm2020/lib/emoji/index.mjs} +0 -0
- package/esm2020/lib/giphy-attachments.mjs +16 -0
- package/{esm2015/lib/index.js → esm2020/lib/index.mjs} +0 -0
- package/esm2020/lib/live-message.component.mjs +96 -0
- package/{esm2015/lib/message-menu-item.js → esm2020/lib/message-menu-item.mjs} +0 -0
- package/{esm2015/lib/sdk-options.js → esm2020/lib/sdk-options.mjs} +0 -0
- package/esm2020/lib/tweet-attachments.mjs +13 -0
- package/esm2020/lib/url-attachments.mjs +42 -0
- package/esm2020/lib/youtube-attachments.mjs +22 -0
- package/{esm2015/public-api.js → esm2020/public-api.mjs} +1 -1
- package/fesm2015/{banta-sdk.js → banta-sdk.mjs} +2559 -2239
- package/fesm2015/banta-sdk.mjs.map +1 -0
- package/fesm2020/banta-sdk.mjs +10490 -0
- package/fesm2020/banta-sdk.mjs.map +1 -0
- package/{banta-sdk.d.ts → index.d.ts} +1 -0
- package/lib/banta/banta.component.d.ts +3 -0
- package/lib/banta-logo.component.d.ts +3 -0
- package/lib/banta-sdk.module.d.ts +24 -0
- package/lib/chat/banta-chat/banta-chat.component.d.ts +3 -0
- package/lib/chat/chat-message/chat-message.component.d.ts +3 -0
- package/lib/chat/chat-view/chat-view.component.d.ts +3 -0
- package/lib/chat/chat.module.d.ts +13 -0
- package/lib/chat/live-chat-message.component.d.ts +3 -0
- package/lib/chat-backend.d.ts +3 -0
- package/lib/comments/attachment-button/attachment-button.component.d.ts +3 -0
- package/lib/comments/attachment-scraper.directive.d.ts +3 -0
- package/lib/comments/banta-comments/banta-comments.component.d.ts +3 -0
- package/lib/comments/comment/comment.component.d.ts +3 -0
- package/lib/comments/comment-field/comment-field.component.d.ts +3 -0
- package/lib/comments/comment-sort/comment-sort.component.d.ts +3 -0
- package/lib/comments/comment-view/comment-view.component.d.ts +3 -0
- package/lib/comments/comments.module.d.ts +28 -0
- package/lib/comments/live-comment.component.d.ts +3 -0
- package/lib/comments/reply-send-options.directive.d.ts +3 -0
- package/lib/common/attachment/attachment.component.d.ts +3 -0
- package/lib/common/attachments/attachments.component.d.ts +3 -0
- package/lib/common/common.module.d.ts +15 -0
- package/lib/common/lightbox/lightbox.component.d.ts +3 -0
- package/lib/common/markdown-to-html.pipe.d.ts +3 -0
- package/lib/common/mention-linker.pipe.d.ts +3 -0
- package/lib/common/timestamp.component.d.ts +3 -0
- package/lib/common/trust-resource-url.pipe.d.ts +3 -0
- package/lib/emoji/emoji-selector-button.component.d.ts +3 -0
- package/lib/emoji/emoji-selector-panel/emoji-selector-panel.component.d.ts +3 -0
- package/lib/emoji/emoji.module.d.ts +14 -0
- package/lib/live-message.component.d.ts +3 -0
- package/lib/url-attachments.d.ts +3 -0
- package/package.json +22 -10
- package/banta-sdk.metadata.json +0 -1
- package/bundles/banta-sdk.umd.js +0 -11913
- package/bundles/banta-sdk.umd.js.map +0 -1
- package/esm2015/lib/banta/banta.component.js +0 -200
- package/esm2015/lib/banta-logo.component.js +0 -20
- package/esm2015/lib/banta-sdk.module.js +0 -98
- package/esm2015/lib/chat/banta-chat/banta-chat.component.js +0 -174
- package/esm2015/lib/chat/chat-message/chat-message.component.js +0 -56
- package/esm2015/lib/chat/chat-view/chat-view.component.js +0 -167
- package/esm2015/lib/chat/chat.module.js +0 -32
- package/esm2015/lib/chat/live-chat-message.component.js +0 -71
- package/esm2015/lib/chat-backend.js +0 -92
- package/esm2015/lib/chat-source.js +0 -199
- package/esm2015/lib/comments/attachment-button/attachment-button.component.js +0 -70
- package/esm2015/lib/comments/attachment-scraper.directive.js +0 -109
- package/esm2015/lib/comments/banta-comments/banta-comments.component.js +0 -678
- package/esm2015/lib/comments/comment/comment.component.js +0 -186
- package/esm2015/lib/comments/comment-field/comment-field.component.js +0 -350
- package/esm2015/lib/comments/comment-sort/comment-sort.component.js +0 -34
- package/esm2015/lib/comments/comment-view/comment-view.component.js +0 -364
- package/esm2015/lib/comments/comments.module.js +0 -62
- package/esm2015/lib/comments/live-comment.component.js +0 -71
- package/esm2015/lib/comments/reply-send-options.directive.js +0 -9
- package/esm2015/lib/common/attachment/attachment.component.js +0 -105
- package/esm2015/lib/common/attachments/attachments.component.js +0 -65
- package/esm2015/lib/common/common.module.js +0 -36
- package/esm2015/lib/common/lightbox/lightbox.component.js +0 -30
- package/esm2015/lib/common/markdown-to-html.pipe.js +0 -75
- package/esm2015/lib/common/mention-linker.pipe.js +0 -31
- package/esm2015/lib/common/timestamp.component.js +0 -106
- package/esm2015/lib/common/trust-resource-url.pipe.js +0 -21
- package/esm2015/lib/emoji/emoji-selector-button.component.js +0 -107
- package/esm2015/lib/emoji/emoji-selector-panel/emoji-selector-panel.component.js +0 -86
- package/esm2015/lib/emoji/emoji.module.js +0 -34
- package/esm2015/lib/giphy-attachments.js +0 -20
- package/esm2015/lib/live-message.component.js +0 -74
- package/esm2015/lib/tweet-attachments.js +0 -16
- package/esm2015/lib/url-attachments.js +0 -46
- package/esm2015/lib/youtube-attachments.js +0 -25
- package/fesm2015/banta-sdk.js.map +0 -1
|
@@ -1,199 +0,0 @@
|
|
|
1
|
-
import { __awaiter, __decorate } from "tslib";
|
|
2
|
-
import { Subject, Subscription } from "rxjs";
|
|
3
|
-
import { RpcEvent, SocketRPC } from "@banta/common";
|
|
4
|
-
export class ChatSource extends SocketRPC {
|
|
5
|
-
constructor(backend, identifier, parentIdentifier, sortOrder) {
|
|
6
|
-
super();
|
|
7
|
-
this.backend = backend;
|
|
8
|
-
this.identifier = identifier;
|
|
9
|
-
this.parentIdentifier = parentIdentifier;
|
|
10
|
-
this.sortOrder = sortOrder;
|
|
11
|
-
this.subscription = new Subscription();
|
|
12
|
-
this._state = 'connecting';
|
|
13
|
-
this._connectionStateChanged = new Subject();
|
|
14
|
-
this.messageMap = new Map();
|
|
15
|
-
this._messageReceived = new Subject();
|
|
16
|
-
this._messageUpdated = new Subject();
|
|
17
|
-
this._messageSent = new Subject();
|
|
18
|
-
this._messageObserved = new Subject();
|
|
19
|
-
this.messages = [];
|
|
20
|
-
this.ready = new Promise(resolve => this.markReady = resolve);
|
|
21
|
-
}
|
|
22
|
-
get state() {
|
|
23
|
-
return this._state;
|
|
24
|
-
}
|
|
25
|
-
set state(value) {
|
|
26
|
-
this._state = value;
|
|
27
|
-
setTimeout(() => this._connectionStateChanged.next(this._state));
|
|
28
|
-
}
|
|
29
|
-
get connectionStateChanged() {
|
|
30
|
-
return this._connectionStateChanged.asObservable();
|
|
31
|
-
}
|
|
32
|
-
bind(socket) {
|
|
33
|
-
const _super = Object.create(null, {
|
|
34
|
-
bind: { get: () => super.bind }
|
|
35
|
-
});
|
|
36
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
37
|
-
_super.bind.call(this, socket);
|
|
38
|
-
this.state = 'connected';
|
|
39
|
-
this.markReady();
|
|
40
|
-
yield this.subscribeToTopic();
|
|
41
|
-
this.subscription.add(this.backend.userChanged.subscribe(() => this.authenticate()));
|
|
42
|
-
socket.addEventListener('open', () => __awaiter(this, void 0, void 0, function* () {
|
|
43
|
-
this.state = 'connected';
|
|
44
|
-
}));
|
|
45
|
-
socket.addEventListener('lost', () => __awaiter(this, void 0, void 0, function* () {
|
|
46
|
-
this.state = 'lost';
|
|
47
|
-
}));
|
|
48
|
-
socket.addEventListener('restore', () => __awaiter(this, void 0, void 0, function* () {
|
|
49
|
-
this.state = 'restored';
|
|
50
|
-
yield this.authenticate();
|
|
51
|
-
yield this.subscribeToTopic();
|
|
52
|
-
}));
|
|
53
|
-
return this;
|
|
54
|
-
});
|
|
55
|
-
}
|
|
56
|
-
mapOrUpdateMessages(messages) {
|
|
57
|
-
return messages.map(message => this.mapOrUpdateMessage(message));
|
|
58
|
-
}
|
|
59
|
-
mapOrUpdateMessage(message) {
|
|
60
|
-
let existingMessage = this.messageMap.get(message.id);
|
|
61
|
-
if (existingMessage) {
|
|
62
|
-
message = Object.assign(existingMessage, message);
|
|
63
|
-
}
|
|
64
|
-
else {
|
|
65
|
-
this.messageMap.set(message.id, message);
|
|
66
|
-
this._messageObserved.next(message);
|
|
67
|
-
}
|
|
68
|
-
return message;
|
|
69
|
-
}
|
|
70
|
-
getExistingMessages() {
|
|
71
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
72
|
-
let messages = yield this.peer.getExistingMessages();
|
|
73
|
-
messages = this.mapOrUpdateMessages(messages);
|
|
74
|
-
return messages;
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
|
-
ensureConnection(errorMessage) {
|
|
78
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
79
|
-
let reason = `Connection to chat services is not currently available.`;
|
|
80
|
-
if (this.state !== 'connected' && this.state !== 'restored') {
|
|
81
|
-
if (errorMessage)
|
|
82
|
-
throw new Error(`${errorMessage}: ${reason}`);
|
|
83
|
-
else
|
|
84
|
-
throw new Error(`${reason}`);
|
|
85
|
-
}
|
|
86
|
-
});
|
|
87
|
-
}
|
|
88
|
-
editMessage(messageId, text) {
|
|
89
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
90
|
-
yield this.ensureConnection();
|
|
91
|
-
yield this.peer.editMessage(messageId, text);
|
|
92
|
-
});
|
|
93
|
-
}
|
|
94
|
-
subscribeToTopic() {
|
|
95
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
96
|
-
yield this.peer.subscribe(this.identifier, this.parentIdentifier, this.sortOrder);
|
|
97
|
-
});
|
|
98
|
-
}
|
|
99
|
-
authenticate() {
|
|
100
|
-
var _a;
|
|
101
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
102
|
-
if (this.backend.user) {
|
|
103
|
-
try {
|
|
104
|
-
yield this.peer.authenticate((_a = this.backend.user) === null || _a === void 0 ? void 0 : _a.token);
|
|
105
|
-
}
|
|
106
|
-
catch (e) {
|
|
107
|
-
console.error(`Could not authenticate with Banta server:`);
|
|
108
|
-
console.error(e);
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
});
|
|
112
|
-
}
|
|
113
|
-
close() {
|
|
114
|
-
super.close();
|
|
115
|
-
this.subscription.unsubscribe();
|
|
116
|
-
}
|
|
117
|
-
onPermissions(permissions) {
|
|
118
|
-
window.bantaPermissionsDebug = permissions;
|
|
119
|
-
this.permissions = permissions;
|
|
120
|
-
}
|
|
121
|
-
onChatMessage(message) {
|
|
122
|
-
if (this.messageMap.has(message.id)) {
|
|
123
|
-
return this.mapOrUpdateMessage(message);
|
|
124
|
-
}
|
|
125
|
-
else if (!message.hidden) {
|
|
126
|
-
// Only process non-hidden messages through here.
|
|
127
|
-
// Hidden messages may be sent to us when they become hidden (ie moderation is occurring).
|
|
128
|
-
// But if we never had the message to begin with, we should discard it.
|
|
129
|
-
this.messageMap.set(message.id, message);
|
|
130
|
-
this._messageReceived.next(message);
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
get messageReceived() { return this._messageReceived.asObservable(); }
|
|
134
|
-
get messageUpdated() { return this._messageUpdated.asObservable(); }
|
|
135
|
-
get messageSent() { return this._messageSent.asObservable(); }
|
|
136
|
-
get messageObserved() { return this._messageObserved.asObservable(); }
|
|
137
|
-
send(message) {
|
|
138
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
139
|
-
yield this.ensureConnection();
|
|
140
|
-
return yield this.peer.sendMessage(message);
|
|
141
|
-
});
|
|
142
|
-
}
|
|
143
|
-
loadAfter(message, count) {
|
|
144
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
145
|
-
if (!message)
|
|
146
|
-
return;
|
|
147
|
-
if (!message.pagingCursor)
|
|
148
|
-
return [];
|
|
149
|
-
return this.mapOrUpdateMessages(yield this.peer.loadAfter(Number(message.pagingCursor), count));
|
|
150
|
-
});
|
|
151
|
-
}
|
|
152
|
-
get(id) {
|
|
153
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
154
|
-
if (this.messageMap.has(id))
|
|
155
|
-
return this.messageMap.get(id);
|
|
156
|
-
yield this.ensureConnection(`Could not get message`);
|
|
157
|
-
let message = yield this.peer.getMessage(id);
|
|
158
|
-
if (this.messageMap.has(id)) {
|
|
159
|
-
let existingMessage = this.messageMap.get(id);
|
|
160
|
-
Object.assign(existingMessage, message);
|
|
161
|
-
message = existingMessage;
|
|
162
|
-
}
|
|
163
|
-
else {
|
|
164
|
-
this.messageMap.set(id, message);
|
|
165
|
-
}
|
|
166
|
-
return message;
|
|
167
|
-
});
|
|
168
|
-
}
|
|
169
|
-
getCount() {
|
|
170
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
171
|
-
return yield this.peer.getCount();
|
|
172
|
-
});
|
|
173
|
-
}
|
|
174
|
-
likeMessage(messageId) {
|
|
175
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
176
|
-
yield this.ensureConnection();
|
|
177
|
-
return yield this.peer.likeMessage(messageId);
|
|
178
|
-
});
|
|
179
|
-
}
|
|
180
|
-
unlikeMessage(messageId) {
|
|
181
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
182
|
-
yield this.ensureConnection();
|
|
183
|
-
return yield this.peer.unlikeMessage(messageId);
|
|
184
|
-
});
|
|
185
|
-
}
|
|
186
|
-
deleteMessage(messageId) {
|
|
187
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
188
|
-
yield this.ensureConnection();
|
|
189
|
-
return yield this.peer.deleteMessage(messageId);
|
|
190
|
-
});
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
__decorate([
|
|
194
|
-
RpcEvent()
|
|
195
|
-
], ChatSource.prototype, "onPermissions", null);
|
|
196
|
-
__decorate([
|
|
197
|
-
RpcEvent()
|
|
198
|
-
], ChatSource.prototype, "onChatMessage", null);
|
|
199
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC1zb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zZGsvc3JjL2xpYi9jaGF0LXNvdXJjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsT0FBTyxFQUFjLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDekQsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJcEQsTUFBTSxPQUFPLFVBQVcsU0FBUSxTQUFTO0lBQ3JDLFlBQ2EsT0FBb0IsRUFDcEIsVUFBa0IsRUFDbEIsZ0JBQXdCLEVBQ3hCLFNBQXdCO1FBRWpDLEtBQUssRUFBRSxDQUFDO1FBTEMsWUFBTyxHQUFQLE9BQU8sQ0FBYTtRQUNwQixlQUFVLEdBQVYsVUFBVSxDQUFRO1FBQ2xCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBUTtRQUN4QixjQUFTLEdBQVQsU0FBUyxDQUFlO1FBTTdCLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQU1sQyxXQUFNLEdBQXFELFlBQVksQ0FBQztRQVd4RSw0QkFBdUIsR0FBRyxJQUFJLE9BQU8sRUFBb0QsQ0FBQztRQTBHMUYsZUFBVSxHQUFHLElBQUksR0FBRyxFQUF1QixDQUFDO1FBQzVDLHFCQUFnQixHQUFHLElBQUksT0FBTyxFQUFlLENBQUM7UUFDOUMsb0JBQWUsR0FBRyxJQUFJLE9BQU8sRUFBZSxDQUFDO1FBQzdDLGlCQUFZLEdBQUcsSUFBSSxPQUFPLEVBQWUsQ0FBQztRQUMxQyxxQkFBZ0IsR0FBRyxJQUFJLE9BQU8sRUFBZSxDQUFDO1FBT3RELGFBQVEsR0FBa0IsRUFBRSxDQUFDO1FBekl6QixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksT0FBTyxDQUFPLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBVUQsSUFBSSxLQUFLO1FBQ0ws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QUFDO1FBQ2xELENBQUM7S0FBQTtJQUVLLGFBQWEsQ0FBQyxTQUFpQjs7WUFDakMsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUM5QixPQUFPLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDcEQsQ0FBQztLQUFBO0lBRUssYUFBYSxDQUFDLFNBQWlCOztZQUNqQyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQzlCLE9BQU8sTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNwRCxDQUFDO0tBQUE7Q0FFSjtBQXJGRztJQURDLFFBQVEsRUFBRTsrQ0FJVjtBQUdEO0lBREMsUUFBUSxFQUFFOytDQVdWIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhdE1lc3NhZ2UsIENoYXRQZXJtaXNzaW9ucywgQ29tbWVudHNPcmRlciwgRHVyYWJsZVNvY2tldCwgVXNlciB9IGZyb20gXCJAYmFudGEvY29tbW9uXCI7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IFJwY0V2ZW50LCBTb2NrZXRSUEMgfSBmcm9tIFwiQGJhbnRhL2NvbW1vblwiO1xyXG5pbXBvcnQgeyBDaGF0U291cmNlQmFzZSB9IGZyb20gXCIuL2NoYXQtc291cmNlLWJhc2VcIjtcclxuaW1wb3J0IHsgQ2hhdEJhY2tlbmQgfSBmcm9tIFwiLi9jaGF0LWJhY2tlbmRcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBDaGF0U291cmNlIGV4dGVuZHMgU29ja2V0UlBDIGltcGxlbWVudHMgQ2hhdFNvdXJjZUJhc2Uge1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcmVhZG9ubHkgYmFja2VuZDogQ2hhdEJhY2tlbmQsXHJcbiAgICAgICAgcmVhZG9ubHkgaWRlbnRpZmllcjogc3RyaW5nLFxyXG4gICAgICAgIHJlYWRvbmx5IHBhcmVudElkZW50aWZpZXI6IHN0cmluZyxcclxuICAgICAgICByZWFkb25seSBzb3J0T3JkZXI6IENvbW1lbnRzT3JkZXJcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgdGhpcy5yZWFkeSA9IG5ldyBQcm9taXNlPHZvaWQ+KHJlc29sdmUgPT4gdGhpcy5tYXJrUmVhZHkgPSByZXNvbHZlKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcclxuICAgIHByaXZhdGUgbWFya1JlYWR5OiAoKSA9PiB2b2lkO1xyXG5cclxuICAgIHJlYWR5OiBQcm9taXNlPHZvaWQ+O1xyXG5cclxuICAgIHBlcm1pc3Npb25zOiBDaGF0UGVybWlzc2lvbnM7XHJcbiAgICBwcml2YXRlIF9zdGF0ZTogJ2Nvbm5lY3RlZCcgfCAnY29ubmVjdGluZycgfCAnbG9zdCcgfCAncmVzdG9yZWQnID0gJ2Nvbm5lY3RpbmcnO1xyXG5cclxuICAgIGdldCBzdGF0ZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGU7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0IHN0YXRlKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5fc3RhdGUgPSB2YWx1ZTtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuX2Nvbm5lY3Rpb25TdGF0ZUNoYW5nZWQubmV4dCh0aGlzLl9zdGF0ZSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2Nvbm5lY3Rpb25TdGF0ZUNoYW5nZWQgPSBuZXcgU3ViamVjdDwnY29ubmVjdGVkJyB8ICdjb25uZWN0aW5nJyB8ICdsb3N0JyB8ICdyZXN0b3JlZCc+KCk7XHJcbiAgICBnZXQgY29ubmVjdGlvblN0YXRlQ2hhbmdlZCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY29ubmVjdGlvblN0YXRlQ2hhbmdlZC5hc09ic2VydmFibGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBiaW5kKHNvY2tldDogRHVyYWJsZVNvY2tldCk6IFByb21pc2U8dGhpcz4ge1xyXG4gICAgICAgIHN1cGVyLmJpbmQoc29ja2V0KTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gJ2Nvbm5lY3RlZCc7XHJcbiAgICAgICAgdGhpcy5tYXJrUmVhZHkoKTtcclxuXHJcbiAgICAgICAgYXdhaXQgdGhpcy5zdWJzY3JpYmVUb1RvcGljKCk7XHJcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24uYWRkKHRoaXMuYmFja2VuZC51c2VyQ2hhbmdlZC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5hdXRoZW50aWNhdGUoKSkpO1xyXG5cclxuICAgICAgICBzb2NrZXQuYWRkRXZlbnRMaXN0ZW5lcignb3BlbicsIGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9ICdjb25uZWN0ZWQnO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBzb2NrZXQuYWRkRXZlbnRMaXN0ZW5lcignbG9zdCcsIGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9ICdsb3N0JztcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgc29ja2V0LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc3RvcmUnLCBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAncmVzdG9yZWQnO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmF1dGhlbnRpY2F0ZSgpO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnN1YnNjcmliZVRvVG9waWMoKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBtYXBPclVwZGF0ZU1lc3NhZ2VzKG1lc3NhZ2VzOiBDaGF0TWVzc2FnZVtdKTogQ2hhdE1lc3NhZ2VbXSB7XHJcbiAgICAgICAgcmV0dXJuIG1lc3NhZ2VzLm1hcChtZXNzYWdlID0+IHRoaXMubWFwT3JVcGRhdGVNZXNzYWdlKG1lc3NhZ2UpKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG1hcE9yVXBkYXRlTWVzc2FnZShtZXNzYWdlOiBDaGF0TWVzc2FnZSk6IENoYXRNZXNzYWdlIHtcclxuICAgICAgICBsZXQgZXhpc3RpbmdNZXNzYWdlID0gdGhpcy5tZXNzYWdlTWFwLmdldChtZXNzYWdlLmlkKTtcclxuICAgICAgICBpZiAoZXhpc3RpbmdNZXNzYWdlKSB7XHJcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBPYmplY3QuYXNzaWduKGV4aXN0aW5nTWVzc2FnZSwgbWVzc2FnZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5tZXNzYWdlTWFwLnNldChtZXNzYWdlLmlkLCBtZXNzYWdlKTtcclxuICAgICAgICAgICAgdGhpcy5fbWVzc2FnZU9ic2VydmVkLm5leHQobWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbWVzc2FnZTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRFeGlzdGluZ01lc3NhZ2VzKCk6IFByb21pc2U8Q2hhdE1lc3NhZ2VbXT4ge1xyXG4gICAgICAgIGxldCBtZXNzYWdlcyA9IGF3YWl0IHRoaXMucGVlci5nZXRFeGlzdGluZ01lc3NhZ2VzKCk7XHJcbiAgICAgICAgbWVzc2FnZXMgPSB0aGlzLm1hcE9yVXBkYXRlTWVzc2FnZXMobWVzc2FnZXMpO1xyXG4gICAgICAgIHJldHVybiBtZXNzYWdlcztcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIGVuc3VyZUNvbm5lY3Rpb24oZXJyb3JNZXNzYWdlPzogc3RyaW5nKSB7XHJcbiAgICAgICAgbGV0IHJlYXNvbiA9IGBDb25uZWN0aW9uIHRvIGNoYXQgc2VydmljZXMgaXMgbm90IGN1cnJlbnRseSBhdmFpbGFibGUuYDtcclxuICAgICAgICBpZiAodGhpcy5zdGF0ZSAhPT0gJ2Nvbm5lY3RlZCcgJiYgdGhpcy5zdGF0ZSAhPT0gJ3Jlc3RvcmVkJykge1xyXG4gICAgICAgICAgICBpZiAoZXJyb3JNZXNzYWdlKVxyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2Vycm9yTWVzc2FnZX06ICR7cmVhc29ufWApO1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7cmVhc29ufWApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBlZGl0TWVzc2FnZShtZXNzYWdlSWQ6IHN0cmluZywgdGV4dDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5lbnN1cmVDb25uZWN0aW9uKCk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5wZWVyLmVkaXRNZXNzYWdlKG1lc3NhZ2VJZCwgdGV4dCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgc3Vic2NyaWJlVG9Ub3BpYygpIHtcclxuICAgICAgICBhd2FpdCB0aGlzLnBlZXIuc3Vic2NyaWJlKHRoaXMuaWRlbnRpZmllciwgdGhpcy5wYXJlbnRJZGVudGlmaWVyLCB0aGlzLnNvcnRPcmRlcik7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgYXV0aGVudGljYXRlKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmJhY2tlbmQudXNlcikge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wZWVyLmF1dGhlbnRpY2F0ZSh0aGlzLmJhY2tlbmQudXNlcj8udG9rZW4pO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBDb3VsZCBub3QgYXV0aGVudGljYXRlIHdpdGggQmFudGEgc2VydmVyOmApO1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjbG9zZSgpOiB2b2lkIHtcclxuICAgICAgICBzdXBlci5jbG9zZSgpO1xyXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgQFJwY0V2ZW50KClcclxuICAgIG9uUGVybWlzc2lvbnMocGVybWlzc2lvbnM6IENoYXRQZXJtaXNzaW9ucykge1xyXG4gICAgICAgICh3aW5kb3cgYXMgYW55KS5iYW50YVBlcm1pc3Npb25zRGVidWcgPSBwZXJtaXNzaW9ucztcclxuICAgICAgICB0aGlzLnBlcm1pc3Npb25zID0gcGVybWlzc2lvbnM7XHJcbiAgICB9XHJcblxyXG4gICAgQFJwY0V2ZW50KClcclxuICAgIG9uQ2hhdE1lc3NhZ2UobWVzc2FnZTogQ2hhdE1lc3NhZ2UpIHtcclxuICAgICAgICBpZiAodGhpcy5tZXNzYWdlTWFwLmhhcyhtZXNzYWdlLmlkKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tYXBPclVwZGF0ZU1lc3NhZ2UobWVzc2FnZSk7XHJcbiAgICAgICAgfSBlbHNlIGlmICghbWVzc2FnZS5oaWRkZW4pIHtcclxuICAgICAgICAgICAgLy8gT25seSBwcm9jZXNzIG5vbi1oaWRkZW4gbWVzc2FnZXMgdGhyb3VnaCBoZXJlLiBcclxuICAgICAgICAgICAgLy8gSGlkZGVuIG1lc3NhZ2VzIG1heSBiZSBzZW50IHRvIHVzIHdoZW4gdGhleSBiZWNvbWUgaGlkZGVuIChpZSBtb2RlcmF0aW9uIGlzIG9jY3VycmluZykuXHJcbiAgICAgICAgICAgIC8vIEJ1dCBpZiB3ZSBuZXZlciBoYWQgdGhlIG1lc3NhZ2UgdG8gYmVnaW4gd2l0aCwgd2Ugc2hvdWxkIGRpc2NhcmQgaXQuXHJcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZU1hcC5zZXQobWVzc2FnZS5pZCwgbWVzc2FnZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX21lc3NhZ2VSZWNlaXZlZC5uZXh0KG1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG1lc3NhZ2VNYXAgPSBuZXcgTWFwPHN0cmluZywgQ2hhdE1lc3NhZ2U+KCk7XHJcbiAgICBwcml2YXRlIF9tZXNzYWdlUmVjZWl2ZWQgPSBuZXcgU3ViamVjdDxDaGF0TWVzc2FnZT4oKTtcclxuICAgIHByaXZhdGUgX21lc3NhZ2VVcGRhdGVkID0gbmV3IFN1YmplY3Q8Q2hhdE1lc3NhZ2U+KCk7XHJcbiAgICBwcml2YXRlIF9tZXNzYWdlU2VudCA9IG5ldyBTdWJqZWN0PENoYXRNZXNzYWdlPigpO1xyXG4gICAgcHJpdmF0ZSBfbWVzc2FnZU9ic2VydmVkID0gbmV3IFN1YmplY3Q8Q2hhdE1lc3NhZ2U+KCk7XHJcblxyXG4gICAgZ2V0IG1lc3NhZ2VSZWNlaXZlZCgpIHsgcmV0dXJuIHRoaXMuX21lc3NhZ2VSZWNlaXZlZC5hc09ic2VydmFibGUoKTsgfVxyXG4gICAgZ2V0IG1lc3NhZ2VVcGRhdGVkKCkgeyByZXR1cm4gdGhpcy5fbWVzc2FnZVVwZGF0ZWQuYXNPYnNlcnZhYmxlKCk7IH1cclxuICAgIGdldCBtZXNzYWdlU2VudCgpIHsgcmV0dXJuIHRoaXMuX21lc3NhZ2VTZW50LmFzT2JzZXJ2YWJsZSgpOyB9XHJcbiAgICBnZXQgbWVzc2FnZU9ic2VydmVkKCkgeyByZXR1cm4gdGhpcy5fbWVzc2FnZU9ic2VydmVkLmFzT2JzZXJ2YWJsZSgpOyB9XHJcblxyXG4gICAgbWVzc2FnZXM6IENoYXRNZXNzYWdlW10gPSBbXTtcclxuXHJcbiAgICBhc3luYyBzZW5kKG1lc3NhZ2U6IENoYXRNZXNzYWdlKTogUHJvbWlzZTxDaGF0TWVzc2FnZT4ge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuZW5zdXJlQ29ubmVjdGlvbigpO1xyXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnBlZXIuc2VuZE1lc3NhZ2UobWVzc2FnZSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgbG9hZEFmdGVyKG1lc3NhZ2U6IENoYXRNZXNzYWdlLCBjb3VudDogbnVtYmVyKTogUHJvbWlzZTxDaGF0TWVzc2FnZVtdPiB7XHJcbiAgICAgICAgaWYgKCFtZXNzYWdlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIGlmICghbWVzc2FnZS5wYWdpbmdDdXJzb3IpXHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICBcclxuICAgICAgICByZXR1cm4gdGhpcy5tYXBPclVwZGF0ZU1lc3NhZ2VzKFxyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnBlZXIubG9hZEFmdGVyKE51bWJlcihtZXNzYWdlLnBhZ2luZ0N1cnNvciksIGNvdW50KVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0KGlkOiBzdHJpbmcpOiBQcm9taXNlPENoYXRNZXNzYWdlPiB7XHJcbiAgICAgICAgaWYgKHRoaXMubWVzc2FnZU1hcC5oYXMoaWQpKVxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tZXNzYWdlTWFwLmdldChpZCk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgYXdhaXQgdGhpcy5lbnN1cmVDb25uZWN0aW9uKGBDb3VsZCBub3QgZ2V0IG1lc3NhZ2VgKTtcclxuICAgICAgICBsZXQgbWVzc2FnZSA9IGF3YWl0IHRoaXMucGVlci5nZXRNZXNzYWdlKGlkKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMubWVzc2FnZU1hcC5oYXMoaWQpKSB7XHJcbiAgICAgICAgICAgIGxldCBleGlzdGluZ01lc3NhZ2UgPSB0aGlzLm1lc3NhZ2VNYXAuZ2V0KGlkKTtcclxuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihleGlzdGluZ01lc3NhZ2UsIG1lc3NhZ2UpO1xyXG4gICAgICAgICAgICBtZXNzYWdlID0gZXhpc3RpbmdNZXNzYWdlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZU1hcC5zZXQoaWQsIG1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0Q291bnQoKTogUHJvbWlzZTxudW1iZXI+IHtcclxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5wZWVyLmdldENvdW50KCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgbGlrZU1lc3NhZ2UobWVzc2FnZUlkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICBhd2FpdCB0aGlzLmVuc3VyZUNvbm5lY3Rpb24oKTtcclxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5wZWVyLmxpa2VNZXNzYWdlKG1lc3NhZ2VJZCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgdW5saWtlTWVzc2FnZShtZXNzYWdlSWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuZW5zdXJlQ29ubmVjdGlvbigpO1xyXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnBlZXIudW5saWtlTWVzc2FnZShtZXNzYWdlSWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGRlbGV0ZU1lc3NhZ2UobWVzc2FnZUlkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICBhd2FpdCB0aGlzLmVuc3VyZUNvbm5lY3Rpb24oKTtcclxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5wZWVyLmRlbGV0ZU1lc3NhZ2UobWVzc2FnZUlkKTtcclxuICAgIH1cclxuXHJcbn0iXX0=
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
import { __awaiter } from "tslib";
|
|
2
|
-
import { Component, Output, ViewChild } from '@angular/core';
|
|
3
|
-
import { CDNProvider } from '@banta/common';
|
|
4
|
-
import { Subject } from 'rxjs';
|
|
5
|
-
export class AttachmentButtonComponent {
|
|
6
|
-
constructor(cdnProvider) {
|
|
7
|
-
this.cdnProvider = cdnProvider;
|
|
8
|
-
this._addedAttachment = new Subject();
|
|
9
|
-
this._attachmentError = new Subject();
|
|
10
|
-
}
|
|
11
|
-
get addedAttachment() { return this._addedAttachment.asObservable(); }
|
|
12
|
-
get attachmentError() { return this._attachmentError.asObservable(); }
|
|
13
|
-
show() {
|
|
14
|
-
this.fileInput.nativeElement.click();
|
|
15
|
-
}
|
|
16
|
-
fileChange(event) {
|
|
17
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
18
|
-
const element = event.currentTarget;
|
|
19
|
-
if (element.files.length) {
|
|
20
|
-
console.log('[Banta] File Added to comment');
|
|
21
|
-
const file = element.files[0];
|
|
22
|
-
let publicURL;
|
|
23
|
-
let attachment = {
|
|
24
|
-
type: file.type,
|
|
25
|
-
url: undefined,
|
|
26
|
-
transientState: {
|
|
27
|
-
uploading: true,
|
|
28
|
-
error: false,
|
|
29
|
-
errorMessage: undefined
|
|
30
|
-
}
|
|
31
|
-
};
|
|
32
|
-
this._addedAttachment.next(attachment);
|
|
33
|
-
try {
|
|
34
|
-
publicURL = yield this.cdnProvider.uploadImage(file);
|
|
35
|
-
}
|
|
36
|
-
catch (e) {
|
|
37
|
-
attachment.transientState.error = true;
|
|
38
|
-
attachment.transientState.errorMessage = "Failed to upload";
|
|
39
|
-
console.error(`[Banta] Caught an error while uploading image to CDN:`);
|
|
40
|
-
console.error(e);
|
|
41
|
-
alert(`Failed to upload image. Please try again later.`);
|
|
42
|
-
this._attachmentError.next(attachment);
|
|
43
|
-
return;
|
|
44
|
-
}
|
|
45
|
-
// If no URL was returned, then an error must have occurred. Presumably the CDN
|
|
46
|
-
// provider has conveyed an error to the user.
|
|
47
|
-
if (!publicURL)
|
|
48
|
-
return;
|
|
49
|
-
attachment.url = publicURL;
|
|
50
|
-
attachment.transientState = undefined;
|
|
51
|
-
}
|
|
52
|
-
});
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
AttachmentButtonComponent.decorators = [
|
|
56
|
-
{ type: Component, args: [{
|
|
57
|
-
selector: 'banta-attachment-button',
|
|
58
|
-
template: "<button matTooltip=\"Add an image or gif\" #button type=\"button\" mat-icon-button (click)=\"show()\">\r\n\t<mat-icon>image</mat-icon>\r\n</button>\r\n<input style=\"display: none;\" #fileUpload [multiple]=\"false\" (change)=\"fileChange($event)\" type=\"file\" >",
|
|
59
|
-
styles: ["button{color:#666}\n"]
|
|
60
|
-
},] }
|
|
61
|
-
];
|
|
62
|
-
AttachmentButtonComponent.ctorParameters = () => [
|
|
63
|
-
{ type: CDNProvider }
|
|
64
|
-
];
|
|
65
|
-
AttachmentButtonComponent.propDecorators = {
|
|
66
|
-
fileInput: [{ type: ViewChild, args: ['fileUpload', { static: false },] }],
|
|
67
|
-
addedAttachment: [{ type: Output }],
|
|
68
|
-
attachmentError: [{ type: Output }]
|
|
69
|
-
};
|
|
70
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0YWNobWVudC1idXR0b24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2RrL3NyYy9saWIvY29tbWVudHMvYXR0YWNobWVudC1idXR0b24vYXR0YWNobWVudC1idXR0b24uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekUsT0FBTyxFQUFFLFdBQVcsRUFBeUIsTUFBTSxlQUFlLENBQUM7QUFDbkUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQU8vQixNQUFNLE9BQU8seUJBQXlCO0lBRXBDLFlBQ1UsV0FBd0I7UUFBeEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFJMUIscUJBQWdCLEdBQUcsSUFBSSxPQUFPLEVBQXlCLENBQUM7UUFDeEQscUJBQWdCLEdBQUcsSUFBSSxPQUFPLEVBQXlCLENBQUM7SUFIaEUsQ0FBQztJQU9ELElBQWMsZUFBZSxLQUFLLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNoRixJQUFjLGVBQWUsS0FBSyxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFaEYsSUFBSTtRQUNELElBQUksQ0FBQyxTQUFTLENBQUMsYUFBa0MsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUM3RCxDQUFDO0lBRUssVUFBVSxDQUFDLEtBQVk7O1lBQzNCLE1BQU0sT0FBTyxHQUFJLEtBQUssQ0FBQyxhQUFrQyxDQUFDO1lBQzFELElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUU7Z0JBQ3hCLE9BQU8sQ0FBQyxHQUFHLENBQUMsK0JBQStCLENBQUMsQ0FBQztnQkFDN0MsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDOUIsSUFBSSxTQUFpQixDQUFDO2dCQUV0QixJQUFJLFVBQVUsR0FBMEI7b0JBQ3RDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtvQkFDZixHQUFHLEVBQUUsU0FBUztvQkFDZCxjQUFjLEVBQUU7d0JBQ2QsU0FBUyxFQUFFLElBQUk7d0JBQ2YsS0FBSyxFQUFFLEtBQUs7d0JBQ1osWUFBWSxFQUFFLFNBQVM7cUJBQ3hCO2lCQUNGLENBQUE7Z0JBRUQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFFdkMsSUFBSTtvQkFDRixTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDdEQ7Z0JBQUMsT0FBTyxDQUFDLEVBQUU7b0JBQ1YsVUFBVSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO29CQUN2QyxVQUFVLENBQUMsY0FBYyxDQUFDLFlBQVksR0FBRyxrQkFBa0IsQ0FBQztvQkFFNUQsT0FBTyxDQUFDLEtBQUssQ0FBQyx1REFBdUQsQ0FBQyxDQUFDO29CQUN2RSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNqQixLQUFLLENBQUMsaURBQWlELENBQUMsQ0FBQztvQkFFekQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztvQkFDdkMsT0FBTztpQkFDUjtnQkFFRCwrRUFBK0U7Z0JBQy9FLDhDQUE4QztnQkFDOUMsSUFBSSxDQUFDLFNBQVM7b0JBQ1osT0FBTztnQkFFVCxVQUFVLENBQUMsR0FBRyxHQUFHLFNBQVMsQ0FBQztnQkFDM0IsVUFBVSxDQUFDLGNBQWMsR0FBRyxTQUFTLENBQUM7YUFDdkM7UUFFSCxDQUFDO0tBQUE7OztZQWxFRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLHlCQUF5QjtnQkFDbkMsb1JBQWlEOzthQUVsRDs7O1lBUFEsV0FBVzs7O3dCQWtCakIsU0FBUyxTQUFDLFlBQVksRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7OEJBRXpDLE1BQU07OEJBQ04sTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgT3V0cHV0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ0ROUHJvdmlkZXIsIENoYXRNZXNzYWdlQXR0YWNobWVudCB9IGZyb20gJ0BiYW50YS9jb21tb24nO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2JhbnRhLWF0dGFjaG1lbnQtYnV0dG9uJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYXR0YWNobWVudC1idXR0b24uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2F0dGFjaG1lbnQtYnV0dG9uLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIEF0dGFjaG1lbnRCdXR0b25Db21wb25lbnQge1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgY2RuUHJvdmlkZXI6IENETlByb3ZpZGVyLFxyXG4gICkge1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfYWRkZWRBdHRhY2htZW50ID0gbmV3IFN1YmplY3Q8Q2hhdE1lc3NhZ2VBdHRhY2htZW50PigpO1xyXG4gIHByaXZhdGUgX2F0dGFjaG1lbnRFcnJvciA9IG5ldyBTdWJqZWN0PENoYXRNZXNzYWdlQXR0YWNobWVudD4oKTtcclxuXHJcbiAgQFZpZXdDaGlsZCgnZmlsZVVwbG9hZCcsIHsgc3RhdGljOiBmYWxzZSB9KSBmaWxlSW5wdXQ6IEVsZW1lbnRSZWY7XHJcblxyXG4gIEBPdXRwdXQoKSBnZXQgYWRkZWRBdHRhY2htZW50KCkgeyByZXR1cm4gdGhpcy5fYWRkZWRBdHRhY2htZW50LmFzT2JzZXJ2YWJsZSgpOyB9XHJcbiAgQE91dHB1dCgpIGdldCBhdHRhY2htZW50RXJyb3IoKSB7IHJldHVybiB0aGlzLl9hdHRhY2htZW50RXJyb3IuYXNPYnNlcnZhYmxlKCk7IH1cclxuXHJcbiAgc2hvdygpIHtcclxuICAgICh0aGlzLmZpbGVJbnB1dC5uYXRpdmVFbGVtZW50IGFzIEhUTUxJbnB1dEVsZW1lbnQpLmNsaWNrKCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBmaWxlQ2hhbmdlKGV2ZW50OiBFdmVudCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3QgZWxlbWVudCA9IChldmVudC5jdXJyZW50VGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpO1xyXG4gICAgaWYgKGVsZW1lbnQuZmlsZXMubGVuZ3RoKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdbQmFudGFdIEZpbGUgQWRkZWQgdG8gY29tbWVudCcpO1xyXG4gICAgICBjb25zdCBmaWxlID0gZWxlbWVudC5maWxlc1swXTtcclxuICAgICAgbGV0IHB1YmxpY1VSTDogc3RyaW5nO1xyXG4gICAgICBcclxuICAgICAgbGV0IGF0dGFjaG1lbnQ6IENoYXRNZXNzYWdlQXR0YWNobWVudCA9IHtcclxuICAgICAgICB0eXBlOiBmaWxlLnR5cGUsXHJcbiAgICAgICAgdXJsOiB1bmRlZmluZWQsXHJcbiAgICAgICAgdHJhbnNpZW50U3RhdGU6IHtcclxuICAgICAgICAgIHVwbG9hZGluZzogdHJ1ZSxcclxuICAgICAgICAgIGVycm9yOiBmYWxzZSxcclxuICAgICAgICAgIGVycm9yTWVzc2FnZTogdW5kZWZpbmVkXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLl9hZGRlZEF0dGFjaG1lbnQubmV4dChhdHRhY2htZW50KTtcclxuXHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgcHVibGljVVJMID0gYXdhaXQgdGhpcy5jZG5Qcm92aWRlci51cGxvYWRJbWFnZShmaWxlKTtcclxuICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIGF0dGFjaG1lbnQudHJhbnNpZW50U3RhdGUuZXJyb3IgPSB0cnVlO1xyXG4gICAgICAgIGF0dGFjaG1lbnQudHJhbnNpZW50U3RhdGUuZXJyb3JNZXNzYWdlID0gXCJGYWlsZWQgdG8gdXBsb2FkXCI7XHJcblxyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFtCYW50YV0gQ2F1Z2h0IGFuIGVycm9yIHdoaWxlIHVwbG9hZGluZyBpbWFnZSB0byBDRE46YCk7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihlKTtcclxuICAgICAgICBhbGVydChgRmFpbGVkIHRvIHVwbG9hZCBpbWFnZS4gUGxlYXNlIHRyeSBhZ2FpbiBsYXRlci5gKTtcclxuXHJcbiAgICAgICAgdGhpcy5fYXR0YWNobWVudEVycm9yLm5leHQoYXR0YWNobWVudCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBJZiBubyBVUkwgd2FzIHJldHVybmVkLCB0aGVuIGFuIGVycm9yIG11c3QgaGF2ZSBvY2N1cnJlZC4gUHJlc3VtYWJseSB0aGUgQ0ROXHJcbiAgICAgIC8vIHByb3ZpZGVyIGhhcyBjb252ZXllZCBhbiBlcnJvciB0byB0aGUgdXNlci5cclxuICAgICAgaWYgKCFwdWJsaWNVUkwpXHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICBcclxuICAgICAgYXR0YWNobWVudC51cmwgPSBwdWJsaWNVUkw7XHJcbiAgICAgIGF0dGFjaG1lbnQudHJhbnNpZW50U3RhdGUgPSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbn1cclxuIl19
|
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
import { __awaiter } from "tslib";
|
|
2
|
-
import { Directive, ElementRef, Input, Output } from "@angular/core";
|
|
3
|
-
import { Subject } from "rxjs";
|
|
4
|
-
import { ChatBackendBase } from "../chat-backend-base";
|
|
5
|
-
export class AttachmentScraperDirective {
|
|
6
|
-
constructor(elementRef, chatBackend) {
|
|
7
|
-
this.elementRef = elementRef;
|
|
8
|
-
this.chatBackend = chatBackend;
|
|
9
|
-
this.attachments = [];
|
|
10
|
-
this.attachmentsChange = new Subject();
|
|
11
|
-
this.scrapeDebounce = 1500;
|
|
12
|
-
this.fragments = new Map();
|
|
13
|
-
}
|
|
14
|
-
ngOnInit() {
|
|
15
|
-
if (typeof window === 'undefined')
|
|
16
|
-
return;
|
|
17
|
-
this.element.addEventListener('keydown', () => {
|
|
18
|
-
clearTimeout(this.scrapeTimeout);
|
|
19
|
-
this.scrapeTimeout = setTimeout(() => this.scrape(), this.scrapeDebounce);
|
|
20
|
-
});
|
|
21
|
-
}
|
|
22
|
-
get element() {
|
|
23
|
-
var _a;
|
|
24
|
-
return (_a = this.elementRef) === null || _a === void 0 ? void 0 : _a.nativeElement;
|
|
25
|
-
}
|
|
26
|
-
get text() {
|
|
27
|
-
return this.element.value;
|
|
28
|
-
}
|
|
29
|
-
scrape() {
|
|
30
|
-
let message = {
|
|
31
|
-
likes: 0,
|
|
32
|
-
message: this.text,
|
|
33
|
-
sentAt: undefined,
|
|
34
|
-
user: null,
|
|
35
|
-
attachments: this.attachments
|
|
36
|
-
};
|
|
37
|
-
let foundFragments = [];
|
|
38
|
-
for (let scraper of this.chatBackend.attachmentScrapers) {
|
|
39
|
-
let fragments = scraper.findFragments(message);
|
|
40
|
-
if (!fragments) {
|
|
41
|
-
console.error(`Attachment fragment scraper ${scraper.constructor.name} is implemented incorrectly: Returned null instead of array`);
|
|
42
|
-
continue;
|
|
43
|
-
}
|
|
44
|
-
for (let fragment of fragments) {
|
|
45
|
-
foundFragments.push(fragment.text);
|
|
46
|
-
if (!this.fragments.has(fragment.text)) {
|
|
47
|
-
console.log(`Scraped new fragment:`);
|
|
48
|
-
console.dir(fragment);
|
|
49
|
-
this.fragments.set(fragment.text, {
|
|
50
|
-
fragment,
|
|
51
|
-
resolution: undefined
|
|
52
|
-
});
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
// Remove fragments that are no longer in the message.
|
|
57
|
-
let removedFragments = [];
|
|
58
|
-
for (let [key] of this.fragments) {
|
|
59
|
-
if (!foundFragments.includes(key))
|
|
60
|
-
removedFragments.push(key);
|
|
61
|
-
}
|
|
62
|
-
for (let removedFragment of removedFragments) {
|
|
63
|
-
console.log(`Removed fragment: ${removedFragment}`);
|
|
64
|
-
this.fragments.delete(removedFragment);
|
|
65
|
-
}
|
|
66
|
-
// Process any fragments that are not yet resolved (or being
|
|
67
|
-
// resolved)
|
|
68
|
-
for (let [key, state] of this.fragments) {
|
|
69
|
-
if (state.resolution)
|
|
70
|
-
continue;
|
|
71
|
-
state.resolution = new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
|
|
72
|
-
console.log(`Resolving fragment ${key}`);
|
|
73
|
-
for (let resolver of this.chatBackend.attachmentResolvers) {
|
|
74
|
-
console.log(`- Trying resolver ${resolver.constructor.name}...`);
|
|
75
|
-
try {
|
|
76
|
-
let attachment = yield resolver.resolveFragment(message, state.fragment);
|
|
77
|
-
if (attachment) {
|
|
78
|
-
console.log(`Resolved fragment ${key} into attachment:`);
|
|
79
|
-
console.dir(attachment);
|
|
80
|
-
this.attachments.push(attachment);
|
|
81
|
-
this.attachmentsChange.next(this.attachments.slice());
|
|
82
|
-
resolve(attachment);
|
|
83
|
-
break;
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
catch (e) {
|
|
87
|
-
console.error(`Caught error during attachment resolver ${resolver.constructor.name}:`);
|
|
88
|
-
console.error(e);
|
|
89
|
-
continue;
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
}));
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
AttachmentScraperDirective.decorators = [
|
|
97
|
-
{ type: Directive, args: [{
|
|
98
|
-
selector: '[attachmentScraper]'
|
|
99
|
-
},] }
|
|
100
|
-
];
|
|
101
|
-
AttachmentScraperDirective.ctorParameters = () => [
|
|
102
|
-
{ type: ElementRef },
|
|
103
|
-
{ type: ChatBackendBase }
|
|
104
|
-
];
|
|
105
|
-
AttachmentScraperDirective.propDecorators = {
|
|
106
|
-
attachments: [{ type: Input }],
|
|
107
|
-
attachmentsChange: [{ type: Output }]
|
|
108
|
-
};
|
|
109
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0YWNobWVudC1zY3JhcGVyLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Nkay9zcmMvbGliL2NvbW1lbnRzL2F0dGFjaG1lbnQtc2NyYXBlci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFckUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUvQixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFVdkQsTUFBTSxPQUFPLDBCQUEwQjtJQUNuQyxZQUNZLFVBQTJDLEVBQzNDLFdBQTRCO1FBRDVCLGVBQVUsR0FBVixVQUFVLENBQWlDO1FBQzNDLGdCQUFXLEdBQVgsV0FBVyxDQUFpQjtRQUkvQixnQkFBVyxHQUE0QixFQUFFLENBQUM7UUFDekMsc0JBQWlCLEdBQUcsSUFBSSxPQUFPLEVBQTJCLENBQUM7UUFxQjdELG1CQUFjLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLGNBQVMsR0FBRyxJQUFJLEdBQUcsRUFBbUMsQ0FBQztJQXpCL0QsQ0FBQztJQUlELFFBQVE7UUFDSixJQUFJLE9BQU8sTUFBTSxLQUFLLFdBQVc7WUFDN0IsT0FBTztRQUVYLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRTtZQUMxQyxZQUFZLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxhQUFhLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDOUUsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsSUFBSSxPQUFPOztRQUNQLE9BQU8sTUFB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Qzs0QkFDekQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQzs0QkFDeEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7NEJBQ2xDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDOzRCQUN0RCxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7NEJBQ3BCLE1BQU07eUJBQ1Q7cUJBQ0o7b0JBQUMsT0FBTyxDQUFDLEVBQUU7d0JBQ1IsT0FBTyxDQUFDLEtBQUssQ0FBQywyQ0FBMkMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO3dCQUN2RixPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUNqQixTQUFTO3FCQUNaO2lCQUNKO1lBQ0wsQ0FBQyxDQUFBLENBQUMsQ0FBQztTQUNOO0lBQ0wsQ0FBQzs7O1lBeEdKLFNBQVMsU0FBQztnQkFDUCxRQUFRLEVBQUUscUJBQXFCO2FBQ2xDOzs7WUFibUIsVUFBVTtZQUlyQixlQUFlOzs7MEJBaUJuQixLQUFLO2dDQUNMLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIElucHV0LCBPdXRwdXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBDaGF0TWVzc2FnZSwgQ2hhdE1lc3NhZ2VBdHRhY2htZW50IH0gZnJvbSBcIkBiYW50YS9jb21tb25cIjtcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IEF0dGFjaG1lbnRGcmFnbWVudCB9IGZyb20gXCIuLi9hdHRhY2htZW50LXNjcmFwZXJcIjtcclxuaW1wb3J0IHsgQ2hhdEJhY2tlbmRCYXNlIH0gZnJvbSBcIi4uL2NoYXQtYmFja2VuZC1iYXNlXCI7XHJcblxyXG5pbnRlcmZhY2UgQXR0YWNobWVudEZyYWdtZW50U3RhdGUge1xyXG4gICAgZnJhZ21lbnQ6IEF0dGFjaG1lbnRGcmFnbWVudDtcclxuICAgIHJlc29sdXRpb246IFByb21pc2U8Q2hhdE1lc3NhZ2VBdHRhY2htZW50PjtcclxufVxyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgICBzZWxlY3RvcjogJ1thdHRhY2htZW50U2NyYXBlcl0nXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBdHRhY2htZW50U2NyYXBlckRpcmVjdGl2ZSB7XHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTFRleHRBcmVhRWxlbWVudD4sXHJcbiAgICAgICAgcHJpdmF0ZSBjaGF0QmFja2VuZDogQ2hhdEJhY2tlbmRCYXNlXHJcbiAgICApIHtcclxuICAgIH1cclxuXHJcbiAgICBASW5wdXQoKSBhdHRhY2htZW50czogQ2hhdE1lc3NhZ2VBdHRhY2htZW50W10gPSBbXTtcclxuICAgIEBPdXRwdXQoKSBhdHRhY2htZW50c0NoYW5nZSA9IG5ldyBTdWJqZWN0PENoYXRNZXNzYWdlQXR0YWNobWVudFtdPigpO1xyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnNjcmFwZVRpbWVvdXQpO1xyXG4gICAgICAgICAgICB0aGlzLnNjcmFwZVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc2NyYXBlKCksIHRoaXMuc2NyYXBlRGVib3VuY2UpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBlbGVtZW50KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRSZWY/Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHRleHQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC52YWx1ZTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgcHJpdmF0ZSBzY3JhcGVUaW1lb3V0O1xyXG4gICAgcHJpdmF0ZSBzY3JhcGVEZWJvdW5jZSA9IDE1MDA7XHJcbiAgICBwcml2YXRlIGZyYWdtZW50cyA9IG5ldyBNYXA8c3RyaW5nLCBBdHRhY2htZW50RnJhZ21lbnRTdGF0ZT4oKTtcclxuICAgIHByaXZhdGUgc2NyYXBlKCkge1xyXG4gICAgICAgIGxldCBtZXNzYWdlOiBDaGF0TWVzc2FnZSA9IHtcclxuICAgICAgICAgICAgbGlrZXM6IDAsXHJcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRoaXMudGV4dCxcclxuICAgICAgICAgICAgc2VudEF0OiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgIHVzZXI6IG51bGwsXHJcbiAgICAgICAgICAgIGF0dGFjaG1lbnRzOiB0aGlzLmF0dGFjaG1lbnRzXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgbGV0IGZvdW5kRnJhZ21lbnRzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBzY3JhcGVyIG9mIHRoaXMuY2hhdEJhY2tlbmQuYXR0YWNobWVudFNjcmFwZXJzKSB7XHJcbiAgICAgICAgICAgIGxldCBmcmFnbWVudHMgPSBzY3JhcGVyLmZpbmRGcmFnbWVudHMobWVzc2FnZSk7XHJcbiAgICAgICAgICAgIGlmICghZnJhZ21lbnRzKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBBdHRhY2htZW50IGZyYWdtZW50IHNjcmFwZXIgJHtzY3JhcGVyLmNvbnN0cnVjdG9yLm5hbWV9IGlzIGltcGxlbWVudGVkIGluY29ycmVjdGx5OiBSZXR1cm5lZCBudWxsIGluc3RlYWQgb2YgYXJyYXlgKTtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZvciAobGV0IGZyYWdtZW50IG9mIGZyYWdtZW50cykge1xyXG4gICAgICAgICAgICAgICAgZm91bmRGcmFnbWVudHMucHVzaChmcmFnbWVudC50ZXh0KTtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5mcmFnbWVudHMuaGFzKGZyYWdtZW50LnRleHQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFNjcmFwZWQgbmV3IGZyYWdtZW50OmApO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZGlyKGZyYWdtZW50KTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZyYWdtZW50cy5zZXQoZnJhZ21lbnQudGV4dCwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcmFnbWVudCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x1dGlvbjogdW5kZWZpbmVkXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFJlbW92ZSBmcmFnbWVudHMgdGhhdCBhcmUgbm8gbG9uZ2VyIGluIHRoZSBtZXNzYWdlLlxyXG4gICAgICAgIGxldCByZW1vdmVkRnJhZ21lbnRzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgICAgIGZvciAobGV0IFtrZXldIG9mIHRoaXMuZnJhZ21lbnRzKSB7XHJcbiAgICAgICAgICAgIGlmICghZm91bmRGcmFnbWVudHMuaW5jbHVkZXMoa2V5KSlcclxuICAgICAgICAgICAgICAgIHJlbW92ZWRGcmFnbWVudHMucHVzaChrZXkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGxldCByZW1vdmVkRnJhZ21lbnQgb2YgcmVtb3ZlZEZyYWdtZW50cykge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgUmVtb3ZlZCBmcmFnbWVudDogJHtyZW1vdmVkRnJhZ21lbnR9YCk7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhZ21lbnRzLmRlbGV0ZShyZW1vdmVkRnJhZ21lbnQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gUHJvY2VzcyBhbnkgZnJhZ21lbnRzIHRoYXQgYXJlIG5vdCB5ZXQgcmVzb2x2ZWQgKG9yIGJlaW5nIFxyXG4gICAgICAgIC8vIHJlc29sdmVkKVxyXG5cclxuICAgICAgICBmb3IgKGxldCBba2V5LCBzdGF0ZV0gb2YgdGhpcy5mcmFnbWVudHMpIHtcclxuICAgICAgICAgICAgaWYgKHN0YXRlLnJlc29sdXRpb24pXHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuXHJcbiAgICAgICAgICAgIHN0YXRlLnJlc29sdXRpb24gPSBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgUmVzb2x2aW5nIGZyYWdtZW50ICR7a2V5fWApO1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgcmVzb2x2ZXIgb2YgdGhpcy5jaGF0QmFja2VuZC5hdHRhY2htZW50UmVzb2x2ZXJzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYC0gVHJ5aW5nIHJlc29sdmVyICR7cmVzb2x2ZXIuY29uc3RydWN0b3IubmFtZX0uLi5gKTtcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgYXR0YWNobWVudCA9IGF3YWl0IHJlc29sdmVyLnJlc29sdmVGcmFnbWVudChtZXNzYWdlLCBzdGF0ZS5mcmFnbWVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhdHRhY2htZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgUmVzb2x2ZWQgZnJhZ21lbnQgJHtrZXl9IGludG8gYXR0YWNobWVudDpgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZGlyKGF0dGFjaG1lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hdHRhY2htZW50cy5wdXNoKGF0dGFjaG1lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hdHRhY2htZW50c0NoYW5nZS5uZXh0KHRoaXMuYXR0YWNobWVudHMuc2xpY2UoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGF0dGFjaG1lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYENhdWdodCBlcnJvciBkdXJpbmcgYXR0YWNobWVudCByZXNvbHZlciAke3Jlc29sdmVyLmNvbnN0cnVjdG9yLm5hbWV9OmApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbn0iXX0=
|