@banta/sdk 5.2.5 → 5.4.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/{esm2022 → esm2020}/banta-sdk.mjs +4 -4
- package/{esm2022 → esm2020}/lib/attachment-scraper.mjs +1 -1
- package/esm2020/lib/banta/banta.component.mjs +204 -0
- package/{esm2022 → esm2020}/lib/banta-logo.component.mjs +11 -11
- package/{esm2022 → esm2020}/lib/banta-sdk.module.mjs +135 -135
- package/esm2020/lib/chat/banta-chat/banta-chat.component.mjs +209 -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/{esm2022 → esm2020}/lib/chat/chat.module.mjs +51 -51
- package/{esm2022 → esm2020}/lib/chat/index.mjs +5 -5
- package/esm2020/lib/chat/live-chat-message.component.mjs +80 -0
- package/esm2020/lib/chat-backend-base.mjs +31 -0
- package/esm2020/lib/chat-backend.mjs +194 -0
- package/{esm2022 → esm2020}/lib/chat-source-base.mjs +1 -1
- package/esm2020/lib/chat-source.mjs +233 -0
- package/esm2020/lib/comments/attachment-button/attachment-button.component.mjs +76 -0
- package/esm2020/lib/comments/attachment-scraper.directive.mjs +107 -0
- package/esm2020/lib/comments/banta-comments/banta-comments.component.mjs +749 -0
- package/esm2020/lib/comments/comment/comment.component.mjs +175 -0
- package/esm2020/lib/comments/comment-field/comment-field.component.mjs +401 -0
- package/esm2020/lib/comments/comment-sort/comment-sort.component.mjs +37 -0
- package/esm2020/lib/comments/comment-view/comment-view.component.mjs +470 -0
- package/{esm2022 → esm2020}/lib/comments/comments.module.mjs +111 -111
- package/{esm2022 → esm2020}/lib/comments/index.mjs +10 -10
- package/esm2020/lib/comments/live-comment.component.mjs +80 -0
- package/{esm2022 → esm2020}/lib/comments/reply-send-options.directive.mjs +13 -13
- package/esm2020/lib/common/attachment/attachment.component.mjs +128 -0
- package/{esm2022 → esm2020}/lib/common/attachments/attachments.component.mjs +75 -75
- package/{esm2022 → esm2020}/lib/common/common.module.mjs +68 -68
- package/{esm2022 → esm2020}/lib/common/index.mjs +10 -10
- package/{esm2022 → esm2020}/lib/common/lazy-connection.mjs +14 -14
- package/esm2020/lib/common/lightbox/lightbox.component.mjs +31 -0
- package/esm2020/lib/common/markdown-to-html.pipe.mjs +88 -0
- package/esm2020/lib/common/mention-linker.pipe.mjs +35 -0
- package/esm2020/lib/common/timer-pool.service.mjs +83 -0
- package/esm2020/lib/common/timestamp.component.mjs +123 -0
- package/{esm2022 → esm2020}/lib/common/trust-resource-url.pipe.mjs +22 -22
- package/esm2020/lib/emoji/emoji-selector-button.component.mjs +116 -0
- package/esm2020/lib/emoji/emoji-selector-panel/emoji-selector-panel.component.mjs +98 -0
- package/{esm2022 → esm2020}/lib/emoji/emoji.module.mjs +55 -55
- package/{esm2022 → esm2020}/lib/emoji/emojis.mjs +6507 -6507
- package/{esm2022 → esm2020}/lib/emoji/index.mjs +4 -4
- package/esm2020/lib/giphy-attachments.mjs +16 -0
- package/{esm2022 → esm2020}/lib/index.mjs +19 -19
- package/{esm2022 → esm2020}/lib/live-message.component.mjs +61 -61
- package/{esm2022 → esm2020}/lib/message-menu-item.mjs +1 -1
- package/{esm2022 → esm2020}/lib/sdk-options.mjs +1 -1
- package/esm2020/lib/static-chat-source.mjs +71 -0
- package/esm2020/lib/tweet-attachments.mjs +13 -0
- package/esm2020/lib/url-attachments.mjs +42 -0
- package/esm2020/lib/youtube-attachments.mjs +29 -0
- package/{esm2022 → esm2020}/public-api.mjs +4 -4
- package/fesm2015/banta-sdk.mjs +11258 -0
- package/fesm2015/banta-sdk.mjs.map +1 -0
- package/{fesm2022 → fesm2020}/banta-sdk.mjs +10823 -10782
- package/fesm2020/banta-sdk.mjs.map +1 -0
- package/index.d.ts +5 -5
- package/lib/attachment-scraper.d.ts +15 -15
- package/lib/banta/banta.component.d.ts +58 -58
- package/lib/banta-logo.component.d.ts +5 -5
- package/lib/banta-sdk.module.d.ts +31 -31
- package/lib/chat/banta-chat/banta-chat.component.d.ts +79 -70
- package/lib/chat/chat-message/chat-message.component.d.ts +21 -21
- package/lib/chat/chat-view/chat-view.component.d.ts +52 -52
- package/lib/chat/chat.module.d.ts +15 -15
- package/lib/chat/index.d.ts +5 -5
- package/lib/chat/live-chat-message.component.d.ts +23 -23
- package/lib/chat-backend-base.d.ts +72 -71
- package/lib/chat-backend.d.ts +67 -67
- package/lib/chat-source-base.d.ts +44 -44
- package/lib/chat-source.d.ts +65 -65
- package/lib/comments/attachment-button/attachment-button.component.d.ts +17 -17
- package/lib/comments/attachment-scraper.directive.d.ts +21 -21
- package/lib/comments/banta-comments/banta-comments.component.d.ts +203 -196
- package/lib/comments/comment/comment.component.d.ts +72 -72
- package/lib/comments/comment-field/comment-field.component.d.ts +89 -89
- package/lib/comments/comment-sort/comment-sort.component.d.ts +16 -16
- package/lib/comments/comment-view/comment-view.component.d.ts +121 -121
- package/lib/comments/comments.module.d.ts +30 -30
- package/lib/comments/index.d.ts +10 -10
- package/lib/comments/live-comment.component.d.ts +23 -23
- package/lib/comments/reply-send-options.directive.d.ts +5 -5
- package/lib/common/attachment/attachment.component.d.ts +34 -34
- package/lib/common/attachments/attachments.component.d.ts +26 -26
- package/lib/common/common.module.d.ts +19 -19
- package/lib/common/index.d.ts +10 -10
- package/lib/common/lazy-connection.d.ts +6 -6
- package/lib/common/lightbox/lightbox.component.d.ts +14 -14
- package/lib/common/markdown-to-html.pipe.d.ts +15 -15
- package/lib/common/mention-linker.pipe.d.ts +13 -13
- package/lib/common/timer-pool.service.d.ts +15 -15
- package/lib/common/timestamp.component.d.ts +19 -19
- package/lib/common/trust-resource-url.pipe.d.ts +10 -10
- package/lib/emoji/emoji-selector-button.component.d.ts +30 -30
- package/lib/emoji/emoji-selector-panel/emoji-selector-panel.component.d.ts +26 -26
- package/lib/emoji/emoji.module.d.ts +16 -16
- package/lib/emoji/emojis.d.ts +6507 -6507
- package/lib/emoji/index.d.ts +4 -4
- package/lib/giphy-attachments.d.ts +5 -5
- package/lib/index.d.ts +19 -19
- package/lib/live-message.component.d.ts +22 -22
- package/lib/message-menu-item.d.ts +6 -6
- package/lib/sdk-options.d.ts +5 -5
- package/lib/static-chat-source.d.ts +42 -42
- package/lib/tweet-attachments.d.ts +5 -5
- package/lib/url-attachments.d.ts +14 -14
- package/lib/youtube-attachments.d.ts +5 -5
- package/package.json +11 -5
- package/public-api.d.ts +1 -1
- package/esm2022/lib/banta/banta.component.mjs +0 -204
- package/esm2022/lib/chat/banta-chat/banta-chat.component.mjs +0 -187
- package/esm2022/lib/chat/chat-message/chat-message.component.mjs +0 -62
- package/esm2022/lib/chat/chat-view/chat-view.component.mjs +0 -170
- package/esm2022/lib/chat/live-chat-message.component.mjs +0 -80
- package/esm2022/lib/chat-backend-base.mjs +0 -31
- package/esm2022/lib/chat-backend.mjs +0 -194
- package/esm2022/lib/chat-source.mjs +0 -233
- package/esm2022/lib/comments/attachment-button/attachment-button.component.mjs +0 -76
- package/esm2022/lib/comments/attachment-scraper.directive.mjs +0 -107
- package/esm2022/lib/comments/banta-comments/banta-comments.component.mjs +0 -730
- package/esm2022/lib/comments/comment/comment.component.mjs +0 -175
- package/esm2022/lib/comments/comment-field/comment-field.component.mjs +0 -401
- package/esm2022/lib/comments/comment-sort/comment-sort.component.mjs +0 -37
- package/esm2022/lib/comments/comment-view/comment-view.component.mjs +0 -470
- package/esm2022/lib/comments/live-comment.component.mjs +0 -80
- package/esm2022/lib/common/attachment/attachment.component.mjs +0 -128
- package/esm2022/lib/common/lightbox/lightbox.component.mjs +0 -31
- package/esm2022/lib/common/markdown-to-html.pipe.mjs +0 -88
- package/esm2022/lib/common/mention-linker.pipe.mjs +0 -35
- package/esm2022/lib/common/timer-pool.service.mjs +0 -83
- package/esm2022/lib/common/timestamp.component.mjs +0 -123
- package/esm2022/lib/emoji/emoji-selector-button.component.mjs +0 -115
- package/esm2022/lib/emoji/emoji-selector-panel/emoji-selector-panel.component.mjs +0 -98
- package/esm2022/lib/giphy-attachments.mjs +0 -16
- package/esm2022/lib/static-chat-source.mjs +0 -71
- package/esm2022/lib/tweet-attachments.mjs +0 -13
- package/esm2022/lib/url-attachments.mjs +0 -42
- package/esm2022/lib/youtube-attachments.mjs +0 -29
- package/fesm2022/banta-sdk.mjs.map +0 -1
|
@@ -1,135 +1,135 @@
|
|
|
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
|
-
import * as i0 from "@angular/core";
|
|
30
|
-
import * as i1 from "./chat-backend-base";
|
|
31
|
-
import * as i2 from "./common/common.module";
|
|
32
|
-
export class BantaSdkModule {
|
|
33
|
-
constructor(chatBackend) {
|
|
34
|
-
chatBackend.registerAttachmentScraper(new UrlAttachmentScraper());
|
|
35
|
-
chatBackend.registerAttachmentResolver(new GiphyAttachmentResolver());
|
|
36
|
-
chatBackend.registerAttachmentResolver(new YouTubeAttachmentResolver());
|
|
37
|
-
chatBackend.registerAttachmentResolver(new TweetAttachmentResolver());
|
|
38
|
-
chatBackend.registerAttachmentResolver(new UrlAttachmentResolver(chatBackend));
|
|
39
|
-
}
|
|
40
|
-
static configure(options) {
|
|
41
|
-
return {
|
|
42
|
-
ngModule: BantaSdkModule,
|
|
43
|
-
providers: [
|
|
44
|
-
{
|
|
45
|
-
provide: BANTA_SDK_OPTIONS,
|
|
46
|
-
useValue: options || {}
|
|
47
|
-
},
|
|
48
|
-
{ provide: ChatBackendBase, useClass: ChatBackend }
|
|
49
|
-
]
|
|
50
|
-
};
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
}
|
|
97
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
98
|
-
type: NgModule,
|
|
99
|
-
args: [{
|
|
100
|
-
imports: [
|
|
101
|
-
CommonModule,
|
|
102
|
-
FormsModule,
|
|
103
|
-
BantaCommonModule.forRoot(),
|
|
104
|
-
CommentsModule,
|
|
105
|
-
ChatModule,
|
|
106
|
-
EmojiModule,
|
|
107
|
-
MatIconModule,
|
|
108
|
-
MatButtonModule,
|
|
109
|
-
MatTooltipModule,
|
|
110
|
-
MatMenuModule,
|
|
111
|
-
MatDialogModule,
|
|
112
|
-
MatFormFieldModule,
|
|
113
|
-
MatInputModule,
|
|
114
|
-
MatProgressSpinnerModule,
|
|
115
|
-
MatSnackBarModule,
|
|
116
|
-
OverlayModule,
|
|
117
|
-
PortalModule
|
|
118
|
-
],
|
|
119
|
-
declarations: [
|
|
120
|
-
BantaComponent,
|
|
121
|
-
BantaLogoComponent,
|
|
122
|
-
LiveMessageComponent
|
|
123
|
-
],
|
|
124
|
-
exports: [
|
|
125
|
-
BantaComponent,
|
|
126
|
-
BantaLogoComponent,
|
|
127
|
-
LiveMessageComponent,
|
|
128
|
-
BantaCommonModule,
|
|
129
|
-
ChatModule,
|
|
130
|
-
CommentsModule,
|
|
131
|
-
EmojiModule
|
|
132
|
-
]
|
|
133
|
-
}]
|
|
134
|
-
}], ctorParameters: ()
|
|
135
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
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
|
+
import * as i0 from "@angular/core";
|
|
30
|
+
import * as i1 from "./chat-backend-base";
|
|
31
|
+
import * as i2 from "./common/common.module";
|
|
32
|
+
export class BantaSdkModule {
|
|
33
|
+
constructor(chatBackend) {
|
|
34
|
+
chatBackend.registerAttachmentScraper(new UrlAttachmentScraper());
|
|
35
|
+
chatBackend.registerAttachmentResolver(new GiphyAttachmentResolver());
|
|
36
|
+
chatBackend.registerAttachmentResolver(new YouTubeAttachmentResolver());
|
|
37
|
+
chatBackend.registerAttachmentResolver(new TweetAttachmentResolver());
|
|
38
|
+
chatBackend.registerAttachmentResolver(new UrlAttachmentResolver(chatBackend));
|
|
39
|
+
}
|
|
40
|
+
static configure(options) {
|
|
41
|
+
return {
|
|
42
|
+
ngModule: BantaSdkModule,
|
|
43
|
+
providers: [
|
|
44
|
+
{
|
|
45
|
+
provide: BANTA_SDK_OPTIONS,
|
|
46
|
+
useValue: options || {}
|
|
47
|
+
},
|
|
48
|
+
{ provide: ChatBackendBase, useClass: ChatBackend }
|
|
49
|
+
]
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
BantaSdkModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: BantaSdkModule, deps: [{ token: i1.ChatBackendBase }], target: i0.ɵɵFactoryTarget.NgModule });
|
|
54
|
+
BantaSdkModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.12", ngImport: i0, type: BantaSdkModule, declarations: [BantaComponent,
|
|
55
|
+
BantaLogoComponent,
|
|
56
|
+
LiveMessageComponent], imports: [CommonModule,
|
|
57
|
+
FormsModule, i2.BantaCommonModule, CommentsModule,
|
|
58
|
+
ChatModule,
|
|
59
|
+
EmojiModule,
|
|
60
|
+
MatIconModule,
|
|
61
|
+
MatButtonModule,
|
|
62
|
+
MatTooltipModule,
|
|
63
|
+
MatMenuModule,
|
|
64
|
+
MatDialogModule,
|
|
65
|
+
MatFormFieldModule,
|
|
66
|
+
MatInputModule,
|
|
67
|
+
MatProgressSpinnerModule,
|
|
68
|
+
MatSnackBarModule,
|
|
69
|
+
OverlayModule,
|
|
70
|
+
PortalModule], exports: [BantaComponent,
|
|
71
|
+
BantaLogoComponent,
|
|
72
|
+
LiveMessageComponent,
|
|
73
|
+
BantaCommonModule,
|
|
74
|
+
ChatModule,
|
|
75
|
+
CommentsModule,
|
|
76
|
+
EmojiModule] });
|
|
77
|
+
BantaSdkModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: BantaSdkModule, imports: [CommonModule,
|
|
78
|
+
FormsModule,
|
|
79
|
+
BantaCommonModule.forRoot(),
|
|
80
|
+
CommentsModule,
|
|
81
|
+
ChatModule,
|
|
82
|
+
EmojiModule,
|
|
83
|
+
MatIconModule,
|
|
84
|
+
MatButtonModule,
|
|
85
|
+
MatTooltipModule,
|
|
86
|
+
MatMenuModule,
|
|
87
|
+
MatDialogModule,
|
|
88
|
+
MatFormFieldModule,
|
|
89
|
+
MatInputModule,
|
|
90
|
+
MatProgressSpinnerModule,
|
|
91
|
+
MatSnackBarModule,
|
|
92
|
+
OverlayModule,
|
|
93
|
+
PortalModule, BantaCommonModule,
|
|
94
|
+
ChatModule,
|
|
95
|
+
CommentsModule,
|
|
96
|
+
EmojiModule] });
|
|
97
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: BantaSdkModule, decorators: [{
|
|
98
|
+
type: NgModule,
|
|
99
|
+
args: [{
|
|
100
|
+
imports: [
|
|
101
|
+
CommonModule,
|
|
102
|
+
FormsModule,
|
|
103
|
+
BantaCommonModule.forRoot(),
|
|
104
|
+
CommentsModule,
|
|
105
|
+
ChatModule,
|
|
106
|
+
EmojiModule,
|
|
107
|
+
MatIconModule,
|
|
108
|
+
MatButtonModule,
|
|
109
|
+
MatTooltipModule,
|
|
110
|
+
MatMenuModule,
|
|
111
|
+
MatDialogModule,
|
|
112
|
+
MatFormFieldModule,
|
|
113
|
+
MatInputModule,
|
|
114
|
+
MatProgressSpinnerModule,
|
|
115
|
+
MatSnackBarModule,
|
|
116
|
+
OverlayModule,
|
|
117
|
+
PortalModule
|
|
118
|
+
],
|
|
119
|
+
declarations: [
|
|
120
|
+
BantaComponent,
|
|
121
|
+
BantaLogoComponent,
|
|
122
|
+
LiveMessageComponent
|
|
123
|
+
],
|
|
124
|
+
exports: [
|
|
125
|
+
BantaComponent,
|
|
126
|
+
BantaLogoComponent,
|
|
127
|
+
LiveMessageComponent,
|
|
128
|
+
BantaCommonModule,
|
|
129
|
+
ChatModule,
|
|
130
|
+
CommentsModule,
|
|
131
|
+
EmojiModule
|
|
132
|
+
]
|
|
133
|
+
}]
|
|
134
|
+
}], ctorParameters: function () { return [{ type: i1.ChatBackendBase }]; } });
|
|
135
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFudGEtc2RrLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3Nkay9zcmMvbGliL2JhbnRhLXNkay5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUF1QixRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUM1QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDdEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzVELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDM0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxj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QUNmLGtCQUFrQjt3QkFDbEIsY0FBYzt3QkFDZCx3QkFBd0I7d0JBQ3hCLGlCQUFpQjt3QkFDakIsYUFBYTt3QkFDYixZQUFZO3FCQUNmO29CQUNELFlBQVksRUFBRTt3QkFDVixjQUFjO3dCQUNkLGtCQUFrQjt3QkFDbEIsb0JBQW9CO3FCQUN2QjtvQkFDRCxPQUFPLEVBQUU7d0JBQ0wsY0FBYzt3QkFDZCxrQkFBa0I7d0JBQ2xCLG9CQUFvQjt3QkFDcEIsaUJBQWlCO3dCQUNqQixVQUFVO3dCQUNWLGNBQWM7d0JBQ2QsV0FBVztxQkFDZDtpQkFDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1vZHVsZVdpdGhQcm92aWRlcnMsIE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbW1lbnRzTW9kdWxlIH0gZnJvbSAnLi9jb21tZW50cyc7XHJcbmltcG9ydCB7IENoYXRNb2R1bGUgfSBmcm9tICcuL2NoYXQnO1xyXG5pbXBvcnQgeyBFbW9qaU1vZHVsZSB9IGZyb20gJy4vZW1vamknO1xyXG5pbXBvcnQgeyBCYW50YUNvbXBvbmVudCB9IGZyb20gJy4vYmFudGEvYmFudGEuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQmFudGFMb2dvQ29tcG9uZW50IH0gZnJvbSAnLi9iYW50YS1sb2dvLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBCYW50YUNvbW1vbk1vZHVsZSB9IGZyb20gJy4vY29tbW9uL2NvbW1vbi5tb2R1bGUnO1xyXG5pbXBvcnQgeyBMaXZlTWVzc2FnZUNvbXBvbmVudCB9IGZyb20gJy4vbGl2ZS1tZXNzYWdlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9idXR0b25cIjtcclxuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9pY29uXCI7XHJcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcFwiO1xyXG5pbXBvcnQgeyBNYXRNZW51TW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL21lbnVcIjtcclxuaW1wb3J0IHsgTWF0RGlhbG9nTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2RpYWxvZ1wiO1xyXG5pbXBvcnQgeyBNYXRTbmFja0Jhck1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9zbmFjay1iYXJcIjtcclxuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGRcIjtcclxuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXRcIjtcclxuaW1wb3J0IHsgTWF0UHJvZ3Jlc3NTcGlubmVyTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL3Byb2dyZXNzLXNwaW5uZXJcIjtcclxuaW1wb3J0IHsgQ2hhdEJhY2tlbmQgfSBmcm9tICcuL2NoYXQtYmFja2VuZCc7XHJcbmltcG9ydCB7IFNka09wdGlvbnMgfSBmcm9tICcuL3Nkay1vcHRpb25zJztcclxuaW1wb3J0IHsgQkFOVEFfU0RLX09QVElPTlMgfSBmcm9tICcuL3Nkay1vcHRpb25zJztcclxuaW1wb3J0IHsgQ2hhdEJhY2tlbmRCYXNlIH0gZnJvbSAnLi9jaGF0LWJhY2tlbmQtYmFzZSc7XHJcbmltcG9ydCB7IE92ZXJsYXlNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XHJcbmltcG9ydCB7IFBvcnRhbE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xyXG5pbXBvcnQgeyBVcmxBdHRhY2htZW50UmVzb2x2ZXIsIFVybEF0dGFjaG1lbnRTY3JhcGVyIH0gZnJvbSAnLi91cmwtYXR0YWNobWVudHMnO1xyXG5pbXBvcnQgeyBZb3VUdWJlQXR0YWNobWVudFJlc29sdmVyIH0gZnJvbSAnLi95b3V0dWJlLWF0dGFjaG1lbnRzJztcclxuaW1wb3J0IHsgR2lwaHlBdHRhY2htZW50UmVzb2x2ZXIgfSBmcm9tICcuL2dpcGh5LWF0dGFjaG1lbnRzJztcclxuaW1wb3J0IHsgVHdlZXRBdHRhY2htZW50UmVzb2x2ZXIgfSBmcm9tICcuL3R3ZWV0LWF0dGFjaG1lbnRzJztcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgICBpbXBvcnRzOiBbXHJcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgICAgIEJhbnRhQ29tbW9uTW9kdWxlLmZvclJvb3QoKSxcclxuICAgICAgICBDb21tZW50c01vZHVsZSxcclxuICAgICAgICBDaGF0TW9kdWxlLFxyXG4gICAgICAgIEVtb2ppTW9kdWxlLFxyXG4gICAgICAgIFxyXG4gICAgICAgIE1hdEljb25Nb2R1bGUsXHJcbiAgICAgICAgTWF0QnV0dG9uTW9kdWxlLFxyXG4gICAgICAgIE1hdFRvb2x0aXBNb2R1bGUsXHJcbiAgICAgICAgTWF0TWVudU1vZHVsZSxcclxuICAgICAgICBNYXREaWFsb2dNb2R1bGUsXHJcbiAgICAgICAgTWF0Rm9ybUZpZWxkTW9kdWxlLFxyXG4gICAgICAgIE1hdElucHV0TW9kdWxlLFxyXG4gICAgICAgIE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZSxcclxuICAgICAgICBNYXRTbmFja0Jhck1vZHVsZSxcclxuICAgICAgICBPdmVybGF5TW9kdWxlLFxyXG4gICAgICAgIFBvcnRhbE1vZHVsZVxyXG4gICAgXSxcclxuICAgIGRlY2xhcmF0aW9uczogW1xyXG4gICAgICAgIEJhbnRhQ29tcG9uZW50LFxyXG4gICAgICAgIEJhbnRhTG9nb0NvbXBvbmVudCxcclxuICAgICAgICBMaXZlTWVzc2FnZUNvbXBvbmVudFxyXG4gICAgXSxcclxuICAgIGV4cG9ydHM6IFtcclxuICAgICAgICBCYW50YUNvbXBvbmVudCxcclxuICAgICAgICBCYW50YUxvZ29Db21wb25lbnQsXHJcbiAgICAgICAgTGl2ZU1lc3NhZ2VDb21wb25lbnQsXHJcbiAgICAgICAgQmFudGFDb21tb25Nb2R1bGUsXHJcbiAgICAgICAgQ2hhdE1vZHVsZSxcclxuICAgICAgICBDb21tZW50c01vZHVsZSxcclxuICAgICAgICBFbW9qaU1vZHVsZVxyXG4gICAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQmFudGFTZGtNb2R1bGUge1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgY2hhdEJhY2tlbmQ6IENoYXRCYWNrZW5kQmFzZVxyXG4gICAgKSB7XHJcbiAgICAgICAgY2hhdEJhY2tlbmQucmVnaXN0ZXJBdHRhY2htZW50U2NyYXBlcihuZXcgVXJsQXR0YWNobWVudFNjcmFwZXIoKSk7XHJcbiAgICAgICAgY2hhdEJhY2tlbmQucmVnaXN0ZXJBdHRhY2htZW50UmVzb2x2ZXIobmV3IEdpcGh5QXR0YWNobWVudFJlc29sdmVyKCkpO1xyXG4gICAgICAgIGNoYXRCYWNrZW5kLnJlZ2lzdGVyQXR0YWNobWVudFJlc29sdmVyKG5ldyBZb3VUdWJlQXR0YWNobWVudFJlc29sdmVyKCkpO1xyXG4gICAgICAgIGNoYXRCYWNrZW5kLnJlZ2lzdGVyQXR0YWNobWVudFJlc29sdmVyKG5ldyBUd2VldEF0dGFjaG1lbnRSZXNvbHZlcigpKTtcclxuICAgICAgICBjaGF0QmFja2VuZC5yZWdpc3RlckF0dGFjaG1lbnRSZXNvbHZlcihuZXcgVXJsQXR0YWNobWVudFJlc29sdmVyKGNoYXRCYWNrZW5kKSk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHN0YXRpYyBjb25maWd1cmUob3B0aW9ucz86IFNka09wdGlvbnMpOiBNb2R1bGVXaXRoUHJvdmlkZXJzPEJhbnRhU2RrTW9kdWxlPiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgbmdNb2R1bGU6IEJhbnRhU2RrTW9kdWxlLFxyXG4gICAgICAgICAgICBwcm92aWRlcnM6IFtcclxuICAgICAgICAgICAgICAgIHsgXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogQkFOVEFfU0RLX09QVElPTlMsIFxyXG4gICAgICAgICAgICAgICAgICAgIHVzZVZhbHVlOiBvcHRpb25zIHx8IHt9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgeyBwcm92aWRlOiBDaGF0QmFja2VuZEJhc2UsIHVzZUNsYXNzOiBDaGF0QmFja2VuZCB9XHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0iXX0=
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
import { Component, Input, Output, ViewChild } from "@angular/core";
|
|
2
|
+
import { Subject, Subscription } from 'rxjs';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "../../chat-backend-base";
|
|
5
|
+
import * as i2 from "@angular/common";
|
|
6
|
+
import * as i3 from "@angular/forms";
|
|
7
|
+
import * as i4 from "@angular/material/button";
|
|
8
|
+
import * as i5 from "../../emoji/emoji-selector-button.component";
|
|
9
|
+
import * as i6 from "../chat-view/chat-view.component";
|
|
10
|
+
/**
|
|
11
|
+
* Chat component
|
|
12
|
+
*/
|
|
13
|
+
export class BantaChatComponent {
|
|
14
|
+
constructor(backend) {
|
|
15
|
+
this.backend = backend;
|
|
16
|
+
this._subs = new Subscription();
|
|
17
|
+
this.user = null;
|
|
18
|
+
this._metadata = {};
|
|
19
|
+
this.signInLabel = 'Sign In';
|
|
20
|
+
this.sendLabel = 'Send';
|
|
21
|
+
this.permissionDeniedLabel = 'Send';
|
|
22
|
+
this.messageFieldPlaceholder = 'Chat';
|
|
23
|
+
this.emptyLabel = 'Be the first to chat';
|
|
24
|
+
this._selected = new Subject();
|
|
25
|
+
this._selected$ = this._selected.asObservable();
|
|
26
|
+
this._reported = new Subject();
|
|
27
|
+
this._reported$ = this._reported.asObservable();
|
|
28
|
+
this._upvoted = new Subject();
|
|
29
|
+
this._upvoted$ = this._upvoted.asObservable();
|
|
30
|
+
this._userSelected = new Subject();
|
|
31
|
+
this._userSelected$ = this._userSelected.asObservable();
|
|
32
|
+
this._permissionDeniedError = new Subject();
|
|
33
|
+
this._permissionDeniedError$ = this._permissionDeniedError.asObservable();
|
|
34
|
+
this._signInSelected = new Subject();
|
|
35
|
+
this._signInSelected$ = this._signInSelected.asObservable();
|
|
36
|
+
this._received = new Subject();
|
|
37
|
+
this._received$ = this._received.asObservable();
|
|
38
|
+
this.showEmojiPanel = false;
|
|
39
|
+
this.newMessage = {};
|
|
40
|
+
}
|
|
41
|
+
ngOnInit() {
|
|
42
|
+
this._subs.add(this.backend.userChanged.subscribe(user => this.user = user));
|
|
43
|
+
}
|
|
44
|
+
ngOnDestroy() {
|
|
45
|
+
this._subs.unsubscribe();
|
|
46
|
+
}
|
|
47
|
+
get source() {
|
|
48
|
+
return this._source;
|
|
49
|
+
}
|
|
50
|
+
set source(value) {
|
|
51
|
+
this._source = value;
|
|
52
|
+
}
|
|
53
|
+
get topicID() {
|
|
54
|
+
return this._source.identifier;
|
|
55
|
+
}
|
|
56
|
+
set topicID(value) {
|
|
57
|
+
this.setSourceFromTopicID(value);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Arbitrary metadata to send to the chat server. This can be used to provide context about the client to the server
|
|
61
|
+
* for things like validating authorization and other uses.
|
|
62
|
+
*/
|
|
63
|
+
get metadata() { return this._metadata; }
|
|
64
|
+
set metadata(value) {
|
|
65
|
+
if (JSON.stringify(this._metadata) !== JSON.stringify(value)) {
|
|
66
|
+
this._metadata = value;
|
|
67
|
+
this.reloadSource();
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
reloadSource() {
|
|
71
|
+
clearTimeout(this._reloadSourceTimeout);
|
|
72
|
+
this._reloadSourceTimeout = setTimeout(() => {
|
|
73
|
+
this.setSourceFromTopicID(this.topicID);
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
async setSourceFromTopicID(topicID) {
|
|
77
|
+
if (this._source && this._source.close)
|
|
78
|
+
this._source.close();
|
|
79
|
+
this._source = null;
|
|
80
|
+
this._source = await this.backend.getSourceForTopic(topicID, {
|
|
81
|
+
metadata: this.metadata
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
get selected() { return this._selected$; }
|
|
85
|
+
get reported() { return this._reported$; }
|
|
86
|
+
get upvoted() { return this._upvoted$; }
|
|
87
|
+
get userSelected() { return this._userSelected$; }
|
|
88
|
+
get permissionDeniedError() { return this._permissionDeniedError$; }
|
|
89
|
+
get signInSelected() { return this._signInSelected$; }
|
|
90
|
+
get received() { return this._received$; }
|
|
91
|
+
onReceived(message) {
|
|
92
|
+
this._received.next(message);
|
|
93
|
+
}
|
|
94
|
+
showSignIn() {
|
|
95
|
+
this._signInSelected.next();
|
|
96
|
+
}
|
|
97
|
+
sendPermissionError(message) {
|
|
98
|
+
this._permissionDeniedError.next(message);
|
|
99
|
+
}
|
|
100
|
+
insertEmoji(emoji) {
|
|
101
|
+
let message = this.newMessage.message || '';
|
|
102
|
+
this.newMessage.message = message + emoji;
|
|
103
|
+
}
|
|
104
|
+
onKeyDown(event) {
|
|
105
|
+
// TODO
|
|
106
|
+
}
|
|
107
|
+
jumpToMessage(message) {
|
|
108
|
+
if (this.chatView)
|
|
109
|
+
this.chatView.jumpTo(message);
|
|
110
|
+
}
|
|
111
|
+
select(message) {
|
|
112
|
+
this._selected.next(message);
|
|
113
|
+
}
|
|
114
|
+
selectUser(message) {
|
|
115
|
+
this._userSelected.next(message);
|
|
116
|
+
}
|
|
117
|
+
report(message) {
|
|
118
|
+
this._reported.next(message);
|
|
119
|
+
}
|
|
120
|
+
async upvote(message) {
|
|
121
|
+
await this.source.likeMessage(message.id);
|
|
122
|
+
this._upvoted.next(message);
|
|
123
|
+
}
|
|
124
|
+
get canChat() {
|
|
125
|
+
if (!this.user)
|
|
126
|
+
return false;
|
|
127
|
+
// TODO
|
|
128
|
+
// if (!this.user.permissions)
|
|
129
|
+
// return true;
|
|
130
|
+
// if (!this.user.permissions.canChat)
|
|
131
|
+
// return true;
|
|
132
|
+
// return this.user.permissions?.canChat(this.source);
|
|
133
|
+
return true;
|
|
134
|
+
}
|
|
135
|
+
async sendMessage() {
|
|
136
|
+
if (!this.source)
|
|
137
|
+
return;
|
|
138
|
+
let text = (this.newMessage.message || '').trim();
|
|
139
|
+
this.newMessage.message = '';
|
|
140
|
+
if (text === '')
|
|
141
|
+
return;
|
|
142
|
+
let message = {
|
|
143
|
+
user: null,
|
|
144
|
+
sentAt: Date.now(),
|
|
145
|
+
likes: 0,
|
|
146
|
+
url: this.url ?? (typeof window !== 'undefined' ? location.href : undefined),
|
|
147
|
+
message: text
|
|
148
|
+
};
|
|
149
|
+
try {
|
|
150
|
+
const intercept = await this.shouldInterceptMessageSend?.(message, this.source);
|
|
151
|
+
if (!intercept) {
|
|
152
|
+
await this.source.send(message);
|
|
153
|
+
}
|
|
154
|
+
this.chatView.scrollToLatest();
|
|
155
|
+
this.inputElementRef.nativeElement.focus();
|
|
156
|
+
}
|
|
157
|
+
catch (e) {
|
|
158
|
+
console.error(`Failed to send message: `, message);
|
|
159
|
+
console.error(e);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
BantaChatComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: BantaChatComponent, deps: [{ token: i1.ChatBackendBase }], target: i0.ɵɵFactoryTarget.Component });
|
|
164
|
+
BantaChatComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: BantaChatComponent, selector: "banta-chat", inputs: { shouldInterceptMessageSend: "shouldInterceptMessageSend", url: "url", source: "source", topicID: "topicID", metadata: "metadata", signInLabel: "signInLabel", sendLabel: "sendLabel", permissionDeniedLabel: "permissionDeniedLabel", messageFieldPlaceholder: "messageFieldPlaceholder", emptyLabel: "emptyLabel" }, outputs: { selected: "selected", reported: "reported", upvoted: "upvoted", userSelected: "userSelected", permissionDeniedError: "permissionDeniedError", signInSelected: "signInSelected", received: "received" }, viewQueries: [{ propertyName: "chatView", first: true, predicate: ["chatView"], descendants: true }, { propertyName: "inputElementRef", first: true, predicate: ["input"], descendants: true }], ngImport: i0, 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>", styles: [":host{display:flex;flex-direction:column;border-radius:5px;padding:10px;flex-grow:1;font-size:10pt;min-height:1px}.entry-container{display:flex;flex-direction:row;flex-grow:1;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:hover,.entry-container input:-webkit-autofill:focus{outline:1px solid #9da302;-webkit-text-fill-color:#9da302;-webkit-box-shadow:0 0 0px 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:initial}form{display:flex;padding:.5em 0;align-items:center}form textarea{font-size:14pt;background:black;color:#fff;border:1px solid #333;min-height:6em;width:100%}form input[type=text]{background:white;color:#000;border:1px solid #ccc;width:100%;height:3.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:black;color:#fff;border:1px solid #333}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i5.EmojiSelectorButtonComponent, selector: "emoji-selector-button", inputs: ["disabled", "overlayX", "overlayY", "originX", "originY"], outputs: ["selected"] }, { kind: "component", type: i6.ChatViewComponent, selector: "banta-chat-view", inputs: ["source", "maxMessages", "emptyLabel"], outputs: ["selected", "userSelected", "reported", "upvoted", "received"] }] });
|
|
165
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: BantaChatComponent, decorators: [{
|
|
166
|
+
type: Component,
|
|
167
|
+
args: [{ selector: 'banta-chat', 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>", styles: [":host{display:flex;flex-direction:column;border-radius:5px;padding:10px;flex-grow:1;font-size:10pt;min-height:1px}.entry-container{display:flex;flex-direction:row;flex-grow:1;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:hover,.entry-container input:-webkit-autofill:focus{outline:1px solid #9da302;-webkit-text-fill-color:#9da302;-webkit-box-shadow:0 0 0px 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:initial}form{display:flex;padding:.5em 0;align-items:center}form textarea{font-size:14pt;background:black;color:#fff;border:1px solid #333;min-height:6em;width:100%}form input[type=text]{background:white;color:#000;border:1px solid #ccc;width:100%;height:3.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:black;color:#fff;border:1px solid #333}\n"] }]
|
|
168
|
+
}], ctorParameters: function () { return [{ type: i1.ChatBackendBase }]; }, propDecorators: { shouldInterceptMessageSend: [{
|
|
169
|
+
type: Input
|
|
170
|
+
}], url: [{
|
|
171
|
+
type: Input
|
|
172
|
+
}], source: [{
|
|
173
|
+
type: Input
|
|
174
|
+
}], topicID: [{
|
|
175
|
+
type: Input
|
|
176
|
+
}], metadata: [{
|
|
177
|
+
type: Input
|
|
178
|
+
}], signInLabel: [{
|
|
179
|
+
type: Input
|
|
180
|
+
}], sendLabel: [{
|
|
181
|
+
type: Input
|
|
182
|
+
}], permissionDeniedLabel: [{
|
|
183
|
+
type: Input
|
|
184
|
+
}], messageFieldPlaceholder: [{
|
|
185
|
+
type: Input
|
|
186
|
+
}], emptyLabel: [{
|
|
187
|
+
type: Input
|
|
188
|
+
}], selected: [{
|
|
189
|
+
type: Output
|
|
190
|
+
}], reported: [{
|
|
191
|
+
type: Output
|
|
192
|
+
}], upvoted: [{
|
|
193
|
+
type: Output
|
|
194
|
+
}], userSelected: [{
|
|
195
|
+
type: Output
|
|
196
|
+
}], permissionDeniedError: [{
|
|
197
|
+
type: Output
|
|
198
|
+
}], signInSelected: [{
|
|
199
|
+
type: Output
|
|
200
|
+
}], received: [{
|
|
201
|
+
type: Output
|
|
202
|
+
}], chatView: [{
|
|
203
|
+
type: ViewChild,
|
|
204
|
+
args: ['chatView']
|
|
205
|
+
}], inputElementRef: [{
|
|
206
|
+
type: ViewChild,
|
|
207
|
+
args: ['input']
|
|
208
|
+
}] } });
|
|
209
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFudGEtY2hhdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZGsvc3JjL2xpYi9jaGF0L2JhbnRhLWNoYXQvYmFudGEtY2hhdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZGsvc3JjL2xpYi9jaGF0L2JhbnRhLWNoYXQvYmFudGEtY2hhdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFjLE1BQU0sZUFBZSxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxPQUFPLEVBQWMsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7OztBQU96RDs7R0FFRztBQU1ILE1BQU0sT0FBTyxrQkFBa0I7SUFDM0IsWUFDWSxPQUF5QjtRQUF6QixZQUFPLEdBQVAsT0FBTyxDQUFrQjtRQUs3QixVQUFLLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNuQyxTQUFJLEdBQVUsSUFBSSxDQUFDO1FBK0JYLGNBQVMsR0FBd0IsRUFBRSxDQUFDO1FBK0JuQyxnQkFBVyxHQUFHLFNBQVMsQ0FBQztRQUN4QixjQUFTLEdBQUcsTUFBTSxDQUFDO1FBQ25CLDBCQUFxQixHQUFHLE1BQU0sQ0FBQztRQUMvQiw0QkFBdUIsR0FBRyxNQUFNLENBQUM7UUFDakMsZUFBVSxHQUFHLHNCQUFzQixDQUFDO1FBRXJDLGNBQVMsR0FBRyxJQUFJLE9BQU8sRUFBZSxDQUFDO1FBQ3ZDLGVBQVUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzNDLGNBQVMsR0FBRyxJQUFJLE9BQU8sRUFBZSxDQUFDO1FBQ3ZDLGVBQVUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzNDLGFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBZSxD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QVk7c0JBQXpCLE1BQU07Z0JBQ08scUJBQXFCO3NCQUFsQyxNQUFNO2dCQUNPLGNBQWM7c0JBQTNCLE1BQU07Z0JBQ08sUUFBUTtzQkFBckIsTUFBTTtnQkEwQmdCLFFBQVE7c0JBQTlCLFNBQVM7dUJBQUMsVUFBVTtnQkFDRCxlQUFlO3NCQUFsQyxTQUFTO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIFZpZXdDaGlsZCwgRWxlbWVudFJlZiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IFN1YmplY3QsIE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5cclxuaW1wb3J0IHsgVXNlciwgQ2hhdE1lc3NhZ2UsIE5ld01lc3NhZ2VGb3JtIH0gZnJvbSAnQGJhbnRhL2NvbW1vbic7XHJcbmltcG9ydCB7IENoYXRWaWV3Q29tcG9uZW50IH0gZnJvbSAnLi4vY2hhdC12aWV3L2NoYXQtdmlldy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDaGF0QmFja2VuZEJhc2UgfSBmcm9tIFwiLi4vLi4vY2hhdC1iYWNrZW5kLWJhc2VcIjtcclxuaW1wb3J0IHsgQ2hhdFNvdXJjZUJhc2UgfSBmcm9tIFwiLi4vLi4vY2hhdC1zb3VyY2UtYmFzZVwiO1xyXG5cclxuLyoqXHJcbiAqIENoYXQgY29tcG9uZW50XHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnYmFudGEtY2hhdCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vYmFudGEtY2hhdC5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9iYW50YS1jaGF0LmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIEJhbnRhQ2hhdENvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIGJhY2tlbmQgOiBDaGF0QmFja2VuZEJhc2VcclxuICAgICkge1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3NvdXJjZSA6IENoYXRTb3VyY2VCYXNlO1xyXG4gICAgcHJpdmF0ZSBfc3VicyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcclxuICAgIHVzZXIgOiBVc2VyID0gbnVsbDtcclxuXHJcbiAgICBASW5wdXQoKSBzaG91bGRJbnRlcmNlcHRNZXNzYWdlU2VuZD86IChtZXNzYWdlOiBDaGF0TWVzc2FnZSwgc291cmNlOiBDaGF0U291cmNlQmFzZSkgPT4gYm9vbGVhbiB8IFByb21pc2U8Ym9vbGVhbj47XHJcbiAgICBASW5wdXQoKSB1cmw6IHN0cmluZztcclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLl9zdWJzLmFkZCh0aGlzLmJhY2tlbmQudXNlckNoYW5nZWQuc3Vic2NyaWJlKHVzZXIgPT4gdGhpcy51c2VyID0gdXNlcikpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCkge1xyXG4gICAgICAgIHRoaXMuX3N1YnMudW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgZ2V0IHNvdXJjZSgpIDogQ2hhdFNvdXJjZUJhc2Uge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zb3VyY2U7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0IHNvdXJjZSh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuX3NvdXJjZSA9IHZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBnZXQgdG9waWNJRCgpIDogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc291cmNlLmlkZW50aWZpZXI7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0IHRvcGljSUQodmFsdWUpIHtcclxuICAgICAgICB0aGlzLnNldFNvdXJjZUZyb21Ub3BpY0lEKHZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9tZXRhZGF0YTogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQXJiaXRyYXJ5IG1ldGFkYXRhIHRvIHNlbmQgdG8gdGhlIGNoYXQgc2VydmVyLiBUaGlzIGNhbiBiZSB1c2VkIHRvIHByb3ZpZGUgY29udGV4dCBhYm91dCB0aGUgY2xpZW50IHRvIHRoZSBzZXJ2ZXJcclxuICAgICAqIGZvciB0aGluZ3MgbGlrZSB2YWxpZGF0aW5nIGF1dGhvcml6YXRpb24gYW5kIG90aGVyIHVzZXMuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIGdldCBtZXRhZGF0YSgpIHsgcmV0dXJuIHRoaXMuX21ldGFkYXRhOyB9XHJcbiAgICBzZXQgbWV0YWRhdGEodmFsdWUpIHtcclxuICAgICAgICBpZiAoSlNPTi5zdHJpbmdpZnkodGhpcy5fbWV0YWRhdGEpICE9PSBKU09OLnN0cmluZ2lmeSh2YWx1ZSkpIHtcclxuICAgICAgICAgICAgdGhpcy5fbWV0YWRhdGEgPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5yZWxvYWRTb3VyY2UoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfcmVsb2FkU291cmNlVGltZW91dDtcclxuICAgIHByaXZhdGUgcmVsb2FkU291cmNlKCkge1xyXG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9yZWxvYWRTb3VyY2VUaW1lb3V0KTtcclxuICAgICAgICB0aGlzLl9yZWxvYWRTb3VyY2VUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U291cmNlRnJvbVRvcGljSUQodGhpcy50b3BpY0lEKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIHNldFNvdXJjZUZyb21Ub3BpY0lEKHRvcGljSUQgOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAodGhpcy5fc291cmNlICYmIHRoaXMuX3NvdXJjZS5jbG9zZSlcclxuICAgICAgICAgICAgdGhpcy5fc291cmNlLmNsb3NlKCk7XHJcbiAgICAgICAgdGhpcy5fc291cmNlID0gbnVsbDtcclxuICAgICAgICB0aGlzLl9zb3VyY2UgPSBhd2FpdCB0aGlzLmJhY2tlbmQuZ2V0U291cmNlRm9yVG9waWModG9waWNJRCwgeyBcclxuICAgICAgICAgICAgbWV0YWRhdGE6IHRoaXMubWV0YWRhdGFcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBASW5wdXQoKSBzaWduSW5MYWJlbCA9ICdTaWduIEluJztcclxuICAgIEBJbnB1dCgpIHNlbmRMYWJlbCA9ICdTZW5kJztcclxuICAgIEBJbnB1dCgpIHBlcm1pc3Npb25EZW5pZWRMYWJlbCA9ICdTZW5kJztcclxuICAgIEBJbnB1dCgpIG1lc3NhZ2VGaWVsZFBsYWNlaG9sZGVyID0gJ0NoYXQnO1xyXG4gICAgQElucHV0KCkgZW1wdHlMYWJlbCA9ICdCZSB0aGUgZmlyc3QgdG8gY2hhdCc7XHJcblxyXG4gICAgcHJpdmF0ZSBfc2VsZWN0ZWQgPSBuZXcgU3ViamVjdDxDaGF0TWVzc2FnZT4oKTtcclxuICAgIHByaXZhdGUgX3NlbGVjdGVkJCA9IHRoaXMuX3NlbGVjdGVkLmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgcHJpdmF0ZSBfcmVwb3J0ZWQgPSBuZXcgU3ViamVjdDxDaGF0TWVzc2FnZT4oKTtcclxuICAgIHByaXZhdGUgX3JlcG9ydGVkJCA9IHRoaXMuX3JlcG9ydGVkLmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgcHJpdmF0ZSBfdXB2b3RlZCA9IG5ldyBTdWJqZWN0PENoYXRNZXNzYWdlPigpO1xyXG4gICAgcHJpdmF0ZSBfdXB2b3RlZCQgPSB0aGlzLl91cHZvdGVkLmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgcHJpdmF0ZSBfdXNlclNlbGVjdGVkID0gbmV3IFN1YmplY3Q8Q2hhdE1lc3NhZ2U+KCk7XHJcbiAgICBwcml2YXRlIF91c2VyU2VsZWN0ZWQkID0gdGhpcy5fdXNlclNlbGVjdGVkLmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgcHJpdmF0ZSBfcGVybWlzc2lvbkRlbmllZEVycm9yID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xyXG4gICAgcHJpdmF0ZSBfcGVybWlzc2lvbkRlbmllZEVycm9yJCA9IHRoaXMuX3Blcm1pc3Npb25EZW5pZWRFcnJvci5hc09ic2VydmFibGUoKTtcclxuICAgIHByaXZhdGUgX3NpZ25JblNlbGVjdGVkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICAgIHByaXZhdGUgX3NpZ25JblNlbGVjdGVkJCA9IHRoaXMuX3NpZ25JblNlbGVjdGVkLmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgcHJpdmF0ZSBfcmVjZWl2ZWQgPSBuZXcgU3ViamVjdDxDaGF0TWVzc2FnZT4oKTtcclxuICAgIHByaXZhdGUgX3JlY2VpdmVkJCA9IHRoaXMuX3JlY2VpdmVkLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICAgIEBPdXRwdXQoKSBnZXQgc2VsZWN0ZWQoKSB7IHJldHVybiB0aGlzLl9zZWxlY3RlZCQ7IH1cclxuICAgIEBPdXRwdXQoKSBnZXQgcmVwb3J0ZWQoKSB7IHJldHVybiB0aGlzLl9yZXBvcnRlZCQ7IH1cclxuICAgIEBPdXRwdXQoKSBnZXQgdXB2b3RlZCgpIHsgcmV0dXJuIHRoaXMuX3Vwdm90ZWQkOyB9XHJcbiAgICBAT3V0cHV0KCkgZ2V0IHVzZXJTZWxlY3RlZCgpIHsgcmV0dXJuIHRoaXMuX3VzZXJTZWxlY3RlZCQ7IH1cclxuICAgIEBPdXRwdXQoKSBnZXQgcGVybWlzc2lvbkRlbmllZEVycm9yKCkgeyByZXR1cm4gdGhpcy5fcGVybWlzc2lvbkRlbmllZEVycm9yJDsgfVxyXG4gICAgQE91dHB1dCgpIGdldCBzaWduSW5TZWxlY3RlZCgpIHsgcmV0dXJuIHRoaXMuX3NpZ25JblNlbGVjdGVkJDsgfVxyXG4gICAgQE91dHB1dCgpIGdldCByZWNlaXZlZCgpIHsgcmV0dXJuIHRoaXMuX3JlY2VpdmVkJDsgfVxyXG5cclxuICAgIG9uUmVjZWl2ZWQobWVzc2FnZTogQ2hhdE1lc3NhZ2UpIHtcclxuICAgICAgICB0aGlzLl9yZWNlaXZlZC5uZXh0KG1lc3NhZ2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHNob3dFbW9qaVBhbmVsID0gZmFsc2U7XHJcblxyXG4gICAgc2hvd1NpZ25JbigpIHtcclxuICAgICAgICB0aGlzLl9zaWduSW5TZWxlY3RlZC5uZXh0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2VuZFBlcm1pc3Npb25FcnJvcihtZXNzYWdlOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLl9wZXJtaXNzaW9uRGVuaWVkRXJyb3IubmV4dChtZXNzYWdlKTtcclxuICAgIH1cclxuXHJcbiAgICBpbnNlcnRFbW9qaShlbW9qaSkge1xyXG4gICAgICAgIGxldCBtZXNzYWdlID0gdGhpcy5uZXdNZXNzYWdlLm1lc3NhZ2UgfHwgJyc7XHJcblxyXG4gICAgICAgIHRoaXMubmV3TWVzc2FnZS5tZXNzYWdlID0gbWVzc2FnZSArIGVtb2ppO1xyXG4gICAgfVxyXG5cclxuICAgIG9uS2V5RG93bihldmVudCA6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgICAgICAvLyBUT0RPXHJcbiAgICB9XHJcblxyXG4gICAgQFZpZXdDaGlsZCgnY2hhdFZpZXcnKSBjaGF0VmlldyA6IENoYXRWaWV3Q29tcG9uZW50O1xyXG4gICAgQFZpZXdDaGlsZCgnaW5wdXQnKSBpbnB1dEVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XHJcblxyXG4gICAganVtcFRvTWVzc2FnZShtZXNzYWdlIDogQ2hhdE1lc3NhZ2UpIHtcclxuICAgICAgICBpZiAodGhpcy5jaGF0VmlldylcclxuICAgICAgICAgICAgdGhpcy5jaGF0Vmlldy5qdW1wVG8obWVzc2FnZSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0KG1lc3NhZ2UgOiBDaGF0TWVzc2FnZSkge1xyXG4gICAgICAgIHRoaXMuX3NlbGVjdGVkLm5leHQobWVzc2FnZSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0VXNlcihtZXNzYWdlIDogQ2hhdE1lc3NhZ2UpIHtcclxuICAgICAgICB0aGlzLl91c2VyU2VsZWN0ZWQubmV4dChtZXNzYWdlKTtcclxuICAgIH1cclxuXHJcbiAgICByZXBvcnQobWVzc2FnZSA6IENoYXRNZXNzYWdlKSB7XHJcbiAgICAgICAgdGhpcy5fcmVwb3J0ZWQubmV4dChtZXNzYWdlKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyB1cHZvdGUobWVzc2FnZSA6IENoYXRNZXNzYWdlKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5zb3VyY2UubGlrZU1lc3NhZ2UobWVzc2FnZS5pZCk7XHJcbiAgICAgICAgdGhpcy5fdXB2b3RlZC5uZXh0KG1lc3NhZ2UpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBjYW5DaGF0KCkge1xyXG4gICAgICAgIGlmICghdGhpcy51c2VyKVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIC8vIFRPRE9cclxuICAgICAgICAvLyBpZiAoIXRoaXMudXNlci5wZXJtaXNzaW9ucylcclxuICAgICAgICAvLyAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgICAgIC8vIGlmICghdGhpcy51c2VyLnBlcm1pc3Npb25zLmNhbkNoYXQpXHJcbiAgICAgICAgLy8gICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgICAgICAvLyByZXR1cm4gdGhpcy51c2VyLnBlcm1pc3Npb25zPy5jYW5DaGF0KHRoaXMuc291cmNlKTtcclxuICAgICAgICBcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBuZXdNZXNzYWdlIDogTmV3TWVzc2FnZUZvcm0gPSB7fTtcclxuXHJcbiAgICBhc3luYyBzZW5kTWVzc2FnZSgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuc291cmNlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCB0ZXh0ID0gKHRoaXMubmV3TWVzc2FnZS5tZXNzYWdlIHx8ICcnKS50cmltKCk7XHJcbiAgICAgICAgdGhpcy5uZXdNZXNzYWdlLm1lc3NhZ2UgPSAnJztcclxuXHJcbiAgICAgICAgaWYgKHRleHQgPT09ICcnKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBtZXNzYWdlIDogQ2hhdE1lc3NhZ2UgPSB7XHJcbiAgICAgICAgICAgIHVzZXI6IG51bGwsXHJcbiAgICAgICAgICAgIHNlbnRBdDogRGF0ZS5ub3coKSxcclxuICAgICAgICAgICAgbGlrZXM6IDAsXHJcbiAgICAgICAgICAgIHVybDogdGhpcy51cmwgPz8gKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gbG9jYXRpb24uaHJlZiA6IHVuZGVmaW5lZCksXHJcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRleHRcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCBpbnRlcmNlcHQgPSBhd2FpdCB0aGlzLnNob3VsZEludGVyY2VwdE1lc3NhZ2VTZW5kPy4obWVzc2FnZSwgdGhpcy5zb3VyY2UpO1xyXG4gICAgICAgICAgICBpZiAoIWludGVyY2VwdCkge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zb3VyY2Uuc2VuZChtZXNzYWdlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jaGF0Vmlldy5zY3JvbGxUb0xhdGVzdCgpO1xyXG4gICAgICAgICAgICB0aGlzLmlucHV0RWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gc2VuZCBtZXNzYWdlOiBgLCBtZXNzYWdlKTtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwiPGJhbnRhLWNoYXQtdmlldyBcclxuICAgICNjaGF0Vmlld1xyXG4gICAgW3NvdXJjZV09XCJzb3VyY2VcIlxyXG4gICAgW2VtcHR5TGFiZWxdPVwiZW1wdHlMYWJlbFwiXHJcbiAgICAodXB2b3RlZCk9XCJ1cHZvdGUoJGV2ZW50KVwiXHJcbiAgICAocmVwb3J0ZWQpPVwicmVwb3J0KCRldmVudClcIlxyXG4gICAgKHNlbGVjdGVkKT1cInNlbGVjdCgkZXZlbnQpXCJcclxuICAgIChyZWNlaXZlZCk9XCJvblJlY2VpdmVkKCRldmVudClcIlxyXG4gICAgKHVzZXJTZWxlY3RlZCk9XCJzZWxlY3RVc2VyKCRldmVudClcIlxyXG4gICAgPjwvYmFudGEtY2hhdC12aWV3PlxyXG5cclxuPGZvcm0gY2xhc3M9XCJuZXctbWVzc2FnZVwiIChzdWJtaXQpPVwic2VuZE1lc3NhZ2UoKVwiPlxyXG4gICAgXHJcbiAgICA8ZGl2IGNsYXNzPVwiZW50cnktY29udGFpbmVyXCI+XHJcbiAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICNpbnB1dFxyXG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgIG5hbWU9XCJtZXNzYWdlXCIgXHJcbiAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXHJcbiAgICAgICAgICAgIGVudGVya2V5aGludD1cInNlbmRcIlxyXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwibWVzc2FnZUZpZWxkUGxhY2Vob2xkZXJcIlxyXG4gICAgICAgICAgICAoa2V5ZG93bik9XCJvbktleURvd24oJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwibmV3TWVzc2FnZS5tZXNzYWdlXCIgLz5cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgPGVtb2ppLXNlbGVjdG9yLWJ1dHRvblxyXG4gICAgICAgICAgICAoc2VsZWN0ZWQpPVwiaW5zZXJ0RW1vamkoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIG92ZXJsYXlZPVwiYm90dG9tXCJcclxuICAgICAgICAgICAgb3ZlcmxheVg9XCJlbmRcIlxyXG4gICAgICAgICAgICBvcmlnaW5ZPVwidG9wXCJcclxuICAgICAgICAgICAgPjwvZW1vamktc2VsZWN0b3ItYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImFjdGlvbnNcIj5cclxuXHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiF1c2VyXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJzaG93U2lnbkluKClcIiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIj57e3NpZ25JbkxhYmVsfX08L2J1dHRvbj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidXNlclwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiY2FuQ2hhdFwiIFtkaXNhYmxlZF09XCIhbmV3TWVzc2FnZS5tZXNzYWdlXCIgbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCI+e3tzZW5kTGFiZWx9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiIWNhbkNoYXRcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cInNlbmRQZXJtaXNzaW9uRXJyb3IoKVwiIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiPnt7cGVybWlzc2lvbkRlbmllZExhYmVsfX08L2J1dHRvbj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG48L2Zvcm0+Il19
|