@banta/sdk 5.4.0 → 5.5.1
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/{esm2020 → esm2022}/banta-sdk.mjs +4 -4
- package/{esm2020 → esm2022}/lib/attachment-scraper.mjs +1 -1
- package/esm2022/lib/banta/banta.component.mjs +204 -0
- package/{esm2020 → esm2022}/lib/banta-logo.component.mjs +11 -11
- package/{esm2020 → esm2022}/lib/banta-sdk.module.mjs +135 -135
- package/esm2022/lib/chat/banta-chat/banta-chat.component.mjs +209 -0
- package/esm2022/lib/chat/chat-message/chat-message.component.mjs +62 -0
- package/esm2022/lib/chat/chat-view/chat-view.component.mjs +170 -0
- package/{esm2020 → esm2022}/lib/chat/chat.module.mjs +51 -51
- package/{esm2020 → esm2022}/lib/chat/index.mjs +5 -5
- package/esm2022/lib/chat/live-chat-message.component.mjs +80 -0
- package/{esm2020 → esm2022}/lib/chat-backend-base.mjs +30 -30
- package/esm2022/lib/chat-backend.mjs +194 -0
- package/{esm2020 → esm2022}/lib/chat-source-base.mjs +1 -1
- package/esm2022/lib/chat-source.mjs +233 -0
- package/esm2022/lib/comments/attachment-button/attachment-button.component.mjs +76 -0
- package/esm2022/lib/comments/attachment-scraper.directive.mjs +107 -0
- package/esm2022/lib/comments/banta-comments/banta-comments.component.mjs +748 -0
- package/esm2022/lib/comments/comment/comment.component.mjs +175 -0
- package/esm2022/lib/comments/comment-field/comment-field.component.mjs +401 -0
- package/esm2022/lib/comments/comment-sort/comment-sort.component.mjs +37 -0
- package/esm2022/lib/comments/comment-view/comment-view.component.mjs +470 -0
- package/{esm2020 → esm2022}/lib/comments/comments.module.mjs +111 -111
- package/{esm2020 → esm2022}/lib/comments/index.mjs +10 -10
- package/esm2022/lib/comments/live-comment.component.mjs +80 -0
- package/{esm2020 → esm2022}/lib/comments/reply-send-options.directive.mjs +13 -13
- package/esm2022/lib/common/attachment/attachment.component.mjs +128 -0
- package/{esm2020 → esm2022}/lib/common/attachments/attachments.component.mjs +75 -75
- package/{esm2020 → esm2022}/lib/common/common.module.mjs +68 -68
- package/{esm2020 → esm2022}/lib/common/index.mjs +10 -10
- package/{esm2020 → esm2022}/lib/common/lazy-connection.mjs +14 -14
- package/esm2022/lib/common/lightbox/lightbox.component.mjs +31 -0
- package/esm2022/lib/common/markdown-to-html.pipe.mjs +88 -0
- package/esm2022/lib/common/mention-linker.pipe.mjs +35 -0
- package/esm2022/lib/common/timer-pool.service.mjs +85 -0
- package/esm2022/lib/common/timestamp.component.mjs +124 -0
- package/{esm2020 → esm2022}/lib/common/trust-resource-url.pipe.mjs +22 -22
- package/esm2022/lib/emoji/emoji-selector-button.component.mjs +115 -0
- package/esm2022/lib/emoji/emoji-selector-panel/emoji-selector-panel.component.mjs +98 -0
- package/{esm2020 → esm2022}/lib/emoji/emoji.module.mjs +55 -55
- package/{esm2020 → esm2022}/lib/emoji/emojis.mjs +6507 -6507
- package/{esm2020 → esm2022}/lib/emoji/index.mjs +4 -4
- package/esm2022/lib/giphy-attachments.mjs +16 -0
- package/{esm2020 → esm2022}/lib/index.mjs +19 -19
- package/{esm2020 → esm2022}/lib/live-message.component.mjs +61 -61
- package/{esm2020 → esm2022}/lib/message-menu-item.mjs +1 -1
- package/{esm2020 → esm2022}/lib/sdk-options.mjs +1 -1
- package/esm2022/lib/static-chat-source.mjs +71 -0
- package/esm2022/lib/tweet-attachments.mjs +13 -0
- package/esm2022/lib/url-attachments.mjs +42 -0
- package/esm2022/lib/youtube-attachments.mjs +29 -0
- package/{esm2020 → esm2022}/public-api.mjs +4 -4
- package/{fesm2020 → fesm2022}/banta-sdk.mjs +10825 -10823
- package/fesm2022/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 -79
- 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 -72
- 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 -203
- 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 +5 -11
- package/public-api.d.ts +1 -1
- package/esm2020/lib/banta/banta.component.mjs +0 -204
- package/esm2020/lib/chat/banta-chat/banta-chat.component.mjs +0 -209
- package/esm2020/lib/chat/chat-message/chat-message.component.mjs +0 -62
- package/esm2020/lib/chat/chat-view/chat-view.component.mjs +0 -170
- package/esm2020/lib/chat/live-chat-message.component.mjs +0 -80
- package/esm2020/lib/chat-backend.mjs +0 -194
- package/esm2020/lib/chat-source.mjs +0 -233
- package/esm2020/lib/comments/attachment-button/attachment-button.component.mjs +0 -76
- package/esm2020/lib/comments/attachment-scraper.directive.mjs +0 -107
- package/esm2020/lib/comments/banta-comments/banta-comments.component.mjs +0 -749
- package/esm2020/lib/comments/comment/comment.component.mjs +0 -175
- package/esm2020/lib/comments/comment-field/comment-field.component.mjs +0 -401
- package/esm2020/lib/comments/comment-sort/comment-sort.component.mjs +0 -37
- package/esm2020/lib/comments/comment-view/comment-view.component.mjs +0 -470
- package/esm2020/lib/comments/live-comment.component.mjs +0 -80
- package/esm2020/lib/common/attachment/attachment.component.mjs +0 -128
- package/esm2020/lib/common/lightbox/lightbox.component.mjs +0 -31
- package/esm2020/lib/common/markdown-to-html.pipe.mjs +0 -88
- package/esm2020/lib/common/mention-linker.pipe.mjs +0 -35
- package/esm2020/lib/common/timer-pool.service.mjs +0 -83
- package/esm2020/lib/common/timestamp.component.mjs +0 -123
- package/esm2020/lib/emoji/emoji-selector-button.component.mjs +0 -116
- package/esm2020/lib/emoji/emoji-selector-panel/emoji-selector-panel.component.mjs +0 -98
- package/esm2020/lib/giphy-attachments.mjs +0 -16
- package/esm2020/lib/static-chat-source.mjs +0 -71
- package/esm2020/lib/tweet-attachments.mjs +0 -13
- package/esm2020/lib/url-attachments.mjs +0 -42
- package/esm2020/lib/youtube-attachments.mjs +0 -29
- package/fesm2015/banta-sdk.mjs +0 -11258
- package/fesm2015/banta-sdk.mjs.map +0 -1
- package/fesm2020/banta-sdk.mjs.map +0 -1
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { Injectable } from "@banta/common";
|
|
3
|
+
/**
|
|
4
|
+
* Provides a way to hook in to a shared set of timers, instead of creating a timer per instance.
|
|
5
|
+
* This is very useful for cases where the update is not extremely time-sensitive, but happens at scale.
|
|
6
|
+
* The principal use case is the TimestampComponent. When several hundred (or several thousand) comments are
|
|
7
|
+
* being displayed, we do not want to trigger thousands of independent relative timestamp updates, because over
|
|
8
|
+
* time the updates will saturate the CPU since they don't perfectly align.
|
|
9
|
+
*/
|
|
10
|
+
let TimerPool = class TimerPool {
|
|
11
|
+
constructor() {
|
|
12
|
+
this.subscriptions = new Map();
|
|
13
|
+
this.newSubscriptions = new Map();
|
|
14
|
+
this.removedSubscriptions = new Map();
|
|
15
|
+
}
|
|
16
|
+
addTimer(interval, callback) {
|
|
17
|
+
if (interval <= 0) {
|
|
18
|
+
console.warn(`Refusing to set timer with interval of ${interval}!`);
|
|
19
|
+
return () => { };
|
|
20
|
+
}
|
|
21
|
+
let state;
|
|
22
|
+
let sizeWas = this.subscriptions.size;
|
|
23
|
+
if (!this.subscriptions.has(interval)) {
|
|
24
|
+
state = { subscribers: [] };
|
|
25
|
+
state.handle = setInterval(() => {
|
|
26
|
+
console.debug(`[Banta/TimerPool] Notifying ${state.subscribers.length} subs [${interval}ms]`);
|
|
27
|
+
state.subscribers.forEach(sub => sub());
|
|
28
|
+
}, interval);
|
|
29
|
+
this.subscriptions.set(interval, state);
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
state = this.subscriptions.get(interval);
|
|
33
|
+
}
|
|
34
|
+
state.subscribers.push(callback);
|
|
35
|
+
// Debug information //////////////////////////
|
|
36
|
+
//
|
|
37
|
+
if (!this.newSubscriptions.has(interval))
|
|
38
|
+
this.newSubscriptions.set(interval, 0);
|
|
39
|
+
this.newSubscriptions.set(interval, (this.newSubscriptions.get(interval) ?? 0) + 1);
|
|
40
|
+
clearTimeout(this.newSubscriptionsNotice);
|
|
41
|
+
this.newSubscriptionsNotice = setTimeout(() => {
|
|
42
|
+
for (let [interval, count] of this.newSubscriptions) {
|
|
43
|
+
console.debug(`[Banta/TimerPool] ${count} new subscriptions to ${interval}ms [${state.subscribers.length} total]`);
|
|
44
|
+
}
|
|
45
|
+
this.newSubscriptions.clear();
|
|
46
|
+
});
|
|
47
|
+
//
|
|
48
|
+
///////////////////////////////////////////////
|
|
49
|
+
if (sizeWas === 0) {
|
|
50
|
+
console.debug(`[Banta/TimerPool] No longer idle.`);
|
|
51
|
+
}
|
|
52
|
+
// Unsubscribe function
|
|
53
|
+
return () => {
|
|
54
|
+
let state = this.subscriptions.get(interval);
|
|
55
|
+
if (!state)
|
|
56
|
+
return;
|
|
57
|
+
let index = state.subscribers.indexOf(callback);
|
|
58
|
+
if (index >= 0)
|
|
59
|
+
state.subscribers.splice(index, 1);
|
|
60
|
+
if (state.subscribers.length === 0) {
|
|
61
|
+
clearInterval(state.handle);
|
|
62
|
+
this.subscriptions.delete(interval);
|
|
63
|
+
}
|
|
64
|
+
if (!this.removedSubscriptions.has(interval))
|
|
65
|
+
this.removedSubscriptions.set(interval, 0);
|
|
66
|
+
this.removedSubscriptions.set(interval, (this.removedSubscriptions.get(interval) ?? 0) + 1);
|
|
67
|
+
// Debug information ////////////////////////////////////////////////////////////////////
|
|
68
|
+
clearTimeout(this.removedSubscriptionsNotice);
|
|
69
|
+
this.removedSubscriptionsNotice = setTimeout(() => {
|
|
70
|
+
for (let [interval, count] of this.removedSubscriptions) {
|
|
71
|
+
let state = this.subscriptions.get(interval);
|
|
72
|
+
console.debug(`[Banta/TimerPool] ${count} unsubscribed from ${interval}ms [${state?.subscribers?.length ?? 0} remain]`);
|
|
73
|
+
}
|
|
74
|
+
if (this.subscriptions.size === 0)
|
|
75
|
+
console.debug(`[Banta/TimerPool] All subscriptions have been removed. Now idle.`);
|
|
76
|
+
this.removedSubscriptions.clear();
|
|
77
|
+
});
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
TimerPool = __decorate([
|
|
82
|
+
Injectable()
|
|
83
|
+
], TimerPool);
|
|
84
|
+
export { TimerPool };
|
|
85
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZXItcG9vbC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2RrL3NyYy9saWIvY29tbW9uL3RpbWVyLXBvb2wuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQU8zQzs7Ozs7O0dBTUc7QUFFSSxJQUFNLFNBQVMsR0FBZixNQUFNLFNBQVM7SUFBZjtRQUNLLGtCQUFhLEdBQUcsSUFBSSxHQUFHLEVBQXNCLENBQUM7UUFHOUMscUJBQWdCLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7UUFHN0MseUJBQW9CLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7SUFtRjdELENBQUM7SUFqRkcsUUFBUSxDQUFDLFFBQWdCLEVBQUUsUUFBb0I7UUFDM0MsSUFBSSxRQUFRLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDaEIsT0FBTyxDQUFDLElBQUksQ0FBQywwQ0FBMEMsUUFBUSxHQUFHLENBQUMsQ0FBQztZQUNwRSxPQUFPLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztRQUNwQixDQUFDO1FBRUQsSUFBSSxLQUFpQixDQUFDO1FBQ3RCLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDO1FBRXRDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQ3BDLEtBQUssR0FBRyxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsQ0FBQztZQUM1QixLQUFLLENBQUMsTUFBTSxHQUFHLFdBQVcsQ0FBQyxHQUFHLEVBQUU7Z0JBQzVCLE9BQU8sQ0FBQyxLQUFLLENBQUMsK0JBQStCLEtBQUssQ0FBQyxXQUFXLENBQUMsTUFBTSxVQUFVLFFBQVEsS0FBSyxDQUFDLENBQUM7Z0JBQzlGLEtBQUssQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFD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QUFLLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7b0JBQ3RELElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUM3QyxPQUFPLENBQUMsS0FBSyxDQUFDLHFCQUFxQixLQUFLLHNCQUFzQixRQUFRLE9BQU8sS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDNUgsQ0FBQztnQkFFRCxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxLQUFLLENBQUM7b0JBQzdCLE9BQU8sQ0FBQyxLQUFLLENBQUMsa0VBQWtFLENBQUMsQ0FBQztnQkFFdEYsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3RDLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDO0lBQ04sQ0FBQztDQUNKLENBQUE7QUExRlksU0FBUztJQURyQixVQUFVLEVBQUU7R0FDQSxTQUFTLENBMEZyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGJhbnRhL2NvbW1vblwiO1xyXG5cclxuaW50ZXJmYWNlIFRpbWVyU3RhdGUge1xyXG4gICAgaGFuZGxlPztcclxuICAgIHN1YnNjcmliZXJzOiAoKCkgPT4gdm9pZClbXTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFByb3ZpZGVzIGEgd2F5IHRvIGhvb2sgaW4gdG8gYSBzaGFyZWQgc2V0IG9mIHRpbWVycywgaW5zdGVhZCBvZiBjcmVhdGluZyBhIHRpbWVyIHBlciBpbnN0YW5jZS5cclxuICogVGhpcyBpcyB2ZXJ5IHVzZWZ1bCBmb3IgY2FzZXMgd2hlcmUgdGhlIHVwZGF0ZSBpcyBub3QgZXh0cmVtZWx5IHRpbWUtc2Vuc2l0aXZlLCBidXQgaGFwcGVucyBhdCBzY2FsZS5cclxuICogVGhlIHByaW5jaXBhbCB1c2UgY2FzZSBpcyB0aGUgVGltZXN0YW1wQ29tcG9uZW50LiBXaGVuIHNldmVyYWwgaHVuZHJlZCAob3Igc2V2ZXJhbCB0aG91c2FuZCkgY29tbWVudHMgYXJlIFxyXG4gKiBiZWluZyBkaXNwbGF5ZWQsIHdlIGRvIG5vdCB3YW50IHRvIHRyaWdnZXIgdGhvdXNhbmRzIG9mIGluZGVwZW5kZW50IHJlbGF0aXZlIHRpbWVzdGFtcCB1cGRhdGVzLCBiZWNhdXNlIG92ZXIgXHJcbiAqIHRpbWUgdGhlIHVwZGF0ZXMgd2lsbCBzYXR1cmF0ZSB0aGUgQ1BVIHNpbmNlIHRoZXkgZG9uJ3QgcGVyZmVjdGx5IGFsaWduLiBcclxuICovXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIFRpbWVyUG9vbCB7XHJcbiAgICBwcml2YXRlIHN1YnNjcmlwdGlvbnMgPSBuZXcgTWFwPG51bWJlciwgVGltZXJTdGF0ZT4oKTtcclxuXHJcbiAgICBwcml2YXRlIG5ld1N1YnNjcmlwdGlvbnNOb3RpY2U7XHJcbiAgICBwcml2YXRlIG5ld1N1YnNjcmlwdGlvbnMgPSBuZXcgTWFwPG51bWJlciwgbnVtYmVyPigpO1xyXG5cclxuICAgIHByaXZhdGUgcmVtb3ZlZFN1YnNjcmlwdGlvbnNOb3RpY2U7XHJcbiAgICBwcml2YXRlIHJlbW92ZWRTdWJzY3JpcHRpb25zID0gbmV3IE1hcDxudW1iZXIsIG51bWJlcj4oKTtcclxuXHJcbiAgICBhZGRUaW1lcihpbnRlcnZhbDogbnVtYmVyLCBjYWxsYmFjazogKCkgPT4gdm9pZCkge1xyXG4gICAgICAgIGlmIChpbnRlcnZhbCA8PSAwKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihgUmVmdXNpbmcgdG8gc2V0IHRpbWVyIHdpdGggaW50ZXJ2YWwgb2YgJHtpbnRlcnZhbH0hYCk7XHJcbiAgICAgICAgICAgIHJldHVybiAoKSA9PiB7fTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBzdGF0ZTogVGltZXJTdGF0ZTtcclxuICAgICAgICBsZXQgc2l6ZVdhcyA9IHRoaXMuc3Vic2NyaXB0aW9ucy5zaXplO1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuc3Vic2NyaXB0aW9ucy5oYXMoaW50ZXJ2YWwpKSB7XHJcbiAgICAgICAgICAgIHN0YXRlID0geyBzdWJzY3JpYmVyczogW10gfTtcclxuICAgICAgICAgICAgc3RhdGUuaGFuZGxlID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5kZWJ1ZyhgW0JhbnRhL1RpbWVyUG9vbF0gTm90aWZ5aW5nICR7c3RhdGUuc3Vic2NyaWJlcnMubGVuZ3RofSBzdWJzIFske2ludGVydmFsfW1zXWApO1xyXG4gICAgICAgICAgICAgICAgc3RhdGUuc3Vic2NyaWJlcnMuZm9yRWFjaChzdWIgPT4gc3ViKCkpO1xyXG4gICAgICAgICAgICB9LCBpbnRlcnZhbCk7XHJcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5zZXQoaW50ZXJ2YWwsIHN0YXRlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzdGF0ZSA9IHRoaXMuc3Vic2NyaXB0aW9ucy5nZXQoaW50ZXJ2YWwpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3RhdGUuc3Vic2NyaWJlcnMucHVzaChjYWxsYmFjayk7XHJcblxyXG4gICAgICAgIC8vIERlYnVnIGluZm9ybWF0aW9uIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgICAgICAgLy9cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLm5ld1N1YnNjcmlwdGlvbnMuaGFzKGludGVydmFsKSlcclxuICAgICAgICAgICAgdGhpcy5uZXdTdWJzY3JpcHRpb25zLnNldChpbnRlcnZhbCwgMCk7XHJcbiAgICAgICAgdGhpcy5uZXdTdWJzY3JpcHRpb25zLnNldChpbnRlcnZhbCwgKHRoaXMubmV3U3Vic2NyaXB0aW9ucy5nZXQoaW50ZXJ2YWwpID8/IDApICsgMSk7XHJcblxyXG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLm5ld1N1YnNjcmlwdGlvbnNOb3RpY2UpO1xyXG4gICAgICAgIHRoaXMubmV3U3Vic2NyaXB0aW9uc05vdGljZSA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBbaW50ZXJ2YWwsIGNvdW50XSBvZiB0aGlzLm5ld1N1YnNjcmlwdGlvbnMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoYFtCYW50YS9UaW1lclBvb2xdICR7Y291bnR9IG5ldyBzdWJzY3JpcHRpb25zIHRvICR7aW50ZXJ2YWx9bXMgWyR7c3RhdGUuc3Vic2NyaWJlcnMubGVuZ3RofSB0b3RhbF1gKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5uZXdTdWJzY3JpcHRpb25zLmNsZWFyKCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vXHJcbiAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuXHJcbiAgICAgICAgaWYgKHNpemVXYXMgPT09IDApIHtcclxuICAgICAgICAgICAgY29uc29sZS5kZWJ1ZyhgW0JhbnRhL1RpbWVyUG9vbF0gTm8gbG9uZ2VyIGlkbGUuYCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBVbnN1YnNjcmliZSBmdW5jdGlvbiBcclxuXHJcbiAgICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICAgICAgbGV0IHN0YXRlID0gdGhpcy5zdWJzY3JpcHRpb25zLmdldChpbnRlcnZhbCk7XHJcbiAgICAgICAgICAgIGlmICghc3RhdGUpXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgICAgICBsZXQgaW5kZXggPSBzdGF0ZS5zdWJzY3JpYmVycy5pbmRleE9mKGNhbGxiYWNrKTtcclxuICAgICAgICAgICAgaWYgKGluZGV4ID49IDApXHJcbiAgICAgICAgICAgICAgICBzdGF0ZS5zdWJzY3JpYmVycy5zcGxpY2UoaW5kZXgsIDEpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHN0YXRlLnN1YnNjcmliZXJzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChzdGF0ZS5oYW5kbGUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmRlbGV0ZShpbnRlcnZhbCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghdGhpcy5yZW1vdmVkU3Vic2NyaXB0aW9ucy5oYXMoaW50ZXJ2YWwpKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVkU3Vic2NyaXB0aW9ucy5zZXQoaW50ZXJ2YWwsIDApO1xyXG4gICAgICAgICAgICB0aGlzLnJlbW92ZWRTdWJzY3JpcHRpb25zLnNldChpbnRlcnZhbCwgKHRoaXMucmVtb3ZlZFN1YnNjcmlwdGlvbnMuZ2V0KGludGVydmFsKSA/PyAwKSArIDEpO1xyXG5cclxuICAgICAgICAgICAgLy8gRGVidWcgaW5mb3JtYXRpb24gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuXHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnJlbW92ZWRTdWJzY3JpcHRpb25zTm90aWNlKTtcclxuICAgICAgICAgICAgdGhpcy5yZW1vdmVkU3Vic2NyaXB0aW9uc05vdGljZSA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgW2ludGVydmFsLCBjb3VudF0gb2YgdGhpcy5yZW1vdmVkU3Vic2NyaXB0aW9ucykge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBzdGF0ZSA9IHRoaXMuc3Vic2NyaXB0aW9ucy5nZXQoaW50ZXJ2YWwpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoYFtCYW50YS9UaW1lclBvb2xdICR7Y291bnR9IHVuc3Vic2NyaWJlZCBmcm9tICR7aW50ZXJ2YWx9bXMgWyR7c3RhdGU/LnN1YnNjcmliZXJzPy5sZW5ndGggPz8gMH0gcmVtYWluXWApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbnMuc2l6ZSA9PT0gMClcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmRlYnVnKGBbQmFudGEvVGltZXJQb29sXSBBbGwgc3Vic2NyaXB0aW9ucyBoYXZlIGJlZW4gcmVtb3ZlZC4gTm93IGlkbGUuYCk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVkU3Vic2NyaXB0aW9ucy5jbGVhcigpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59Il19
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { Component, Input } from "@angular/core";
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "../../lib/common/timer-pool.service";
|
|
4
|
+
import * as i2 from "@angular/common";
|
|
5
|
+
export class TimestampComponent {
|
|
6
|
+
constructor(timerPool) {
|
|
7
|
+
this.timerPool = timerPool;
|
|
8
|
+
this.relative = '';
|
|
9
|
+
this.tooltip = '';
|
|
10
|
+
this.timerInterval = 0;
|
|
11
|
+
this._destroyed = false;
|
|
12
|
+
this.showAbsolute = false;
|
|
13
|
+
}
|
|
14
|
+
ngOnDestroy() {
|
|
15
|
+
this._destroyed = true;
|
|
16
|
+
this.timerUnsubscribe?.();
|
|
17
|
+
this.timerUnsubscribe = undefined;
|
|
18
|
+
}
|
|
19
|
+
get value() {
|
|
20
|
+
return this._value;
|
|
21
|
+
}
|
|
22
|
+
update() {
|
|
23
|
+
if (this._destroyed)
|
|
24
|
+
return;
|
|
25
|
+
let now = Date.now();
|
|
26
|
+
let diff = now - this.value;
|
|
27
|
+
let minute = 1000 * 60;
|
|
28
|
+
let hour = minute * 60;
|
|
29
|
+
let day = hour * 24;
|
|
30
|
+
let week = day * 7;
|
|
31
|
+
let month = day * 30;
|
|
32
|
+
let year = day * 365;
|
|
33
|
+
this.showAbsolute = false;
|
|
34
|
+
let updateTime = 0;
|
|
35
|
+
if (diff > year) {
|
|
36
|
+
this.showAbsolute = true;
|
|
37
|
+
this.relative = 'abs';
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
if (diff > month) {
|
|
41
|
+
let months = Math.floor(diff / month);
|
|
42
|
+
if (months === 1)
|
|
43
|
+
this.relative = `${months} month ago`;
|
|
44
|
+
else
|
|
45
|
+
this.relative = `${months} months ago`;
|
|
46
|
+
}
|
|
47
|
+
else if (diff > week) {
|
|
48
|
+
let weeks = Math.floor(diff / week);
|
|
49
|
+
if (weeks === 1)
|
|
50
|
+
this.relative = `${weeks} week ago`;
|
|
51
|
+
else
|
|
52
|
+
this.relative = `${weeks} weeks ago`;
|
|
53
|
+
}
|
|
54
|
+
else if (diff > day) {
|
|
55
|
+
let days = Math.floor(diff / day);
|
|
56
|
+
if (days === 1)
|
|
57
|
+
this.relative = `${days} day ago`;
|
|
58
|
+
else
|
|
59
|
+
this.relative = `${days} days ago`;
|
|
60
|
+
}
|
|
61
|
+
else if (diff > hour) {
|
|
62
|
+
let hours = Math.floor(diff / hour);
|
|
63
|
+
if (hours === 1)
|
|
64
|
+
this.relative = `${hours} hour ago`;
|
|
65
|
+
else
|
|
66
|
+
this.relative = `${hours} hours ago`;
|
|
67
|
+
updateTime = 1000 * 60 * 30;
|
|
68
|
+
}
|
|
69
|
+
else if (diff > minute) {
|
|
70
|
+
let minutes = Math.floor(diff / minute);
|
|
71
|
+
if (minutes === 1)
|
|
72
|
+
this.relative = `${minutes} minute ago`;
|
|
73
|
+
else
|
|
74
|
+
this.relative = `${minutes} minutes ago`;
|
|
75
|
+
updateTime = 1000 * 45;
|
|
76
|
+
}
|
|
77
|
+
else if (diff > 30_000) {
|
|
78
|
+
this.relative = `about a minute ago`;
|
|
79
|
+
updateTime = 1000 * 60;
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
this.relative = `just now`;
|
|
83
|
+
updateTime = 1000 * 30;
|
|
84
|
+
}
|
|
85
|
+
if (typeof window !== 'undefined') {
|
|
86
|
+
if (this.timerInterval !== updateTime) {
|
|
87
|
+
this.timerInterval = updateTime;
|
|
88
|
+
this.timerUnsubscribe?.();
|
|
89
|
+
if (updateTime > 0) {
|
|
90
|
+
this.timerUnsubscribe = this.timerPool.addTimer(updateTime, () => this.update());
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
set value(v) {
|
|
96
|
+
if (this._value !== v) {
|
|
97
|
+
this._value = v;
|
|
98
|
+
this.update();
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: TimestampComponent, deps: [{ token: i1.TimerPool }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
102
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.9", type: TimestampComponent, selector: "banta-timestamp", inputs: { value: "value" }, ngImport: i0, template: `
|
|
103
|
+
<span *ngIf="showAbsolute" [title]="value | date : 'short'">
|
|
104
|
+
{{value | date : 'shortDate'}}
|
|
105
|
+
</span>
|
|
106
|
+
<span *ngIf="!showAbsolute" [title]="value | date : 'short'">
|
|
107
|
+
{{relative}}
|
|
108
|
+
</span>
|
|
109
|
+
`, isInline: true, styles: [""], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2.DatePipe, name: "date" }] }); }
|
|
110
|
+
}
|
|
111
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: TimestampComponent, decorators: [{
|
|
112
|
+
type: Component,
|
|
113
|
+
args: [{ selector: 'banta-timestamp', template: `
|
|
114
|
+
<span *ngIf="showAbsolute" [title]="value | date : 'short'">
|
|
115
|
+
{{value | date : 'shortDate'}}
|
|
116
|
+
</span>
|
|
117
|
+
<span *ngIf="!showAbsolute" [title]="value | date : 'short'">
|
|
118
|
+
{{relative}}
|
|
119
|
+
</span>
|
|
120
|
+
` }]
|
|
121
|
+
}], ctorParameters: () => [{ type: i1.TimerPool }], propDecorators: { value: [{
|
|
122
|
+
type: Input
|
|
123
|
+
}] } });
|
|
124
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZXN0YW1wLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Nkay9zcmMvbGliL2NvbW1vbi90aW1lc3RhbXAuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7O0FBZWpELE1BQU0sT0FBTyxrQkFBa0I7SUFDM0IsWUFDWSxTQUFvQjtRQUFwQixjQUFTLEdBQVQsU0FBUyxDQUFXO1FBS2hDLGFBQVEsR0FBRyxFQUFFLENBQUM7UUFDZCxZQUFPLEdBQUcsRUFBRSxDQUFDO1FBR0wsa0JBQWEsR0FBVyxDQUFDLENBQUM7UUFFMUIsZUFBVSxHQUFHLEtBQUssQ0FBQztRQWEzQixpQkFBWSxHQUFHLEtBQUssQ0FBQztJQXRCckIsQ0FBQztJQVdELFdBQVc7UUFDUCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztRQUN2QixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxTQUFTLENBQUM7SUFDdEMsQ0FBQztJQUVELElBQ0ksS0FBSztRQUNMLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBSUQsTUFBTTtRQUNGLElBQUksSUFBSSxDQUFDLFVBQVU7WUFDZixPQUFPO1FBRVgsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLElBQUksSUFBSSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQzVCLElBQUksTUFBTSxHQUFHLElBQUksR0FBQyxFQUFFLENBQUM7UUFDckIsSUFBSSxJQUFJLEdBQUcsTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUN2QixJQUFJLEdBQUcsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLElBQUksSUFBSSxHQUFHLEdB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QUFJLENBQUMsYUFBYSxLQUFLLFVBQVUsRUFBRSxDQUFDO2dCQUNwQyxJQUFJLENBQUMsYUFBYSxHQUFHLFVBQVUsQ0FBQztnQkFDaEMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLEVBQUUsQ0FBQztnQkFDMUIsSUFBSSxVQUFVLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQ2pCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7Z0JBQ3JGLENBQUM7WUFDTCxDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7SUFFRCxJQUFJLEtBQUssQ0FBQyxDQUFDO1FBQ1AsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQ2hCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNsQixDQUFDO0lBQ0wsQ0FBQzs4R0E3R1Esa0JBQWtCO2tHQUFsQixrQkFBa0IsbUZBVmpCOzs7Ozs7O0tBT1Q7OzJGQUdRLGtCQUFrQjtrQkFaOUIsU0FBUzsrQkFDSSxpQkFBaUIsWUFDakI7Ozs7Ozs7S0FPVDs4RUF5QkcsS0FBSztzQkFEUixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IFRpbWVyUG9vbCB9IGZyb20gXCIuLi8uLi9saWIvY29tbW9uL3RpbWVyLXBvb2wuc2VydmljZVwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2JhbnRhLXRpbWVzdGFtcCcsXHJcbiAgICB0ZW1wbGF0ZTogYFxyXG4gICAgICAgIDxzcGFuICpuZ0lmPVwic2hvd0Fic29sdXRlXCIgW3RpdGxlXT1cInZhbHVlIHwgZGF0ZSA6ICdzaG9ydCdcIj5cclxuICAgICAgICAgICAge3t2YWx1ZSB8IGRhdGUgOiAnc2hvcnREYXRlJ319XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDxzcGFuICpuZ0lmPVwiIXNob3dBYnNvbHV0ZVwiIFt0aXRsZV09XCJ2YWx1ZSB8IGRhdGUgOiAnc2hvcnQnXCI+XHJcbiAgICAgICAgICAgIHt7cmVsYXRpdmV9fVxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgIGAsXHJcbiAgICBzdHlsZXM6IFtgYF1cclxufSlcclxuZXhwb3J0IGNsYXNzIFRpbWVzdGFtcENvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIHRpbWVyUG9vbDogVGltZXJQb29sXHJcbiAgICApIHtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF92YWx1ZSA6IG51bWJlcjtcclxuICAgIHJlbGF0aXZlID0gJyc7XHJcbiAgICB0b29sdGlwID0gJyc7XHJcblxyXG4gICAgcHJpdmF0ZSB0aW1lclVuc3Vic2NyaWJlOiAoKSA9PiB2b2lkO1xyXG4gICAgcHJpdmF0ZSB0aW1lckludGVydmFsOiBudW1iZXIgPSAwO1xyXG5cclxuICAgIHByaXZhdGUgX2Rlc3Ryb3llZCA9IGZhbHNlO1xyXG5cclxuICAgIG5nT25EZXN0cm95KCkge1xyXG4gICAgICAgIHRoaXMuX2Rlc3Ryb3llZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy50aW1lclVuc3Vic2NyaWJlPy4oKTtcclxuICAgICAgICB0aGlzLnRpbWVyVW5zdWJzY3JpYmUgPSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIGdldCB2YWx1ZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgc2hvd0Fic29sdXRlID0gZmFsc2U7XHJcblxyXG4gICAgdXBkYXRlKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9kZXN0cm95ZWQpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBcclxuICAgICAgICBsZXQgbm93ID0gRGF0ZS5ub3coKTtcclxuICAgICAgICBsZXQgZGlmZiA9IG5vdyAtIHRoaXMudmFsdWU7XHJcbiAgICAgICAgbGV0IG1pbnV0ZSA9IDEwMDAqNjA7XHJcbiAgICAgICAgbGV0IGhvdXIgPSBtaW51dGUgKiA2MDtcclxuICAgICAgICBsZXQgZGF5ID0gaG91ciAqIDI0O1xyXG4gICAgICAgIGxldCB3ZWVrID0gZGF5ICogNztcclxuICAgICAgICBsZXQgbW9udGggPSBkYXkgKiAzMDtcclxuICAgICAgICBsZXQgeWVhciA9IGRheSAqIDM2NTtcclxuICAgICAgICB0aGlzLnNob3dBYnNvbHV0ZSA9IGZhbHNlO1xyXG4gICAgICAgIGxldCB1cGRhdGVUaW1lID0gMDtcclxuXHJcbiAgICAgICAgaWYgKGRpZmYgPiB5ZWFyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0Fic29sdXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5yZWxhdGl2ZSA9ICdhYnMnO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZGlmZiA+IG1vbnRoKSB7XHJcbiAgICAgICAgICAgIGxldCBtb250aHMgPSBNYXRoLmZsb29yKGRpZmYgLyBtb250aCk7XHJcblxyXG4gICAgICAgICAgICBpZiAobW9udGhzID09PSAxKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWxhdGl2ZSA9IGAke21vbnRoc30gbW9udGggYWdvYDtcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWxhdGl2ZSA9IGAke21vbnRoc30gbW9udGhzIGFnb2A7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH0gZWxzZSBpZiAoZGlmZiA+IHdlZWspIHtcclxuICAgICAgICAgICAgbGV0IHdlZWtzID0gTWF0aC5mbG9vcihkaWZmIC8gd2Vlayk7XHJcblxyXG4gICAgICAgICAgICBpZiAod2Vla3MgPT09IDEpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbGF0aXZlID0gYCR7d2Vla3N9IHdlZWsgYWdvYDtcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWxhdGl2ZSA9IGAke3dlZWtzfSB3ZWVrcyBhZ29gO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZGlmZiA+IGRheSkge1xyXG4gICAgICAgICAgICBsZXQgZGF5cyA9IE1hdGguZmxvb3IoZGlmZiAvIGRheSk7XHJcbiAgICAgICAgICAgIGlmIChkYXlzID09PSAxKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWxhdGl2ZSA9IGAke2RheXN9IGRheSBhZ29gO1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbGF0aXZlID0gYCR7ZGF5c30gZGF5cyBhZ29gO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZGlmZiA+IGhvdXIpIHtcclxuICAgICAgICAgICAgbGV0IGhvdXJzID0gTWF0aC5mbG9vcihkaWZmIC8gaG91cik7XHJcbiAgICAgICAgICAgIGlmIChob3VycyA9PT0gMSlcclxuICAgICAgICAgICAgICAgIHRoaXMucmVsYXRpdmUgPSBgJHtob3Vyc30gaG91ciBhZ29gO1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbGF0aXZlID0gYCR7aG91cnN9IGhvdXJzIGFnb2A7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB1cGRhdGVUaW1lID0gMTAwMCAqIDYwICogMzA7XHJcbiAgICAgICAgfSBlbHNlIGlmIChkaWZmID4gbWludXRlKSB7XHJcbiAgICAgICAgICAgIGxldCBtaW51dGVzID0gTWF0aC5mbG9vcihkaWZmIC8gbWludXRlKTtcclxuICAgICAgICAgICAgaWYgKG1pbnV0ZXMgPT09IDEpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbGF0aXZlID0gYCR7bWludXRlc30gbWludXRlIGFnb2A7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHRoaXMucmVsYXRpdmUgPSBgJHttaW51dGVzfSBtaW51dGVzIGFnb2A7XHJcbiAgICAgICAgICAgIHVwZGF0ZVRpbWUgPSAxMDAwICogNDU7XHJcbiAgICAgICAgfSBlbHNlIGlmIChkaWZmID4gMzBfMDAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVsYXRpdmUgPSBgYWJvdXQgYSBtaW51dGUgYWdvYDtcclxuICAgICAgICAgICAgdXBkYXRlVGltZSA9IDEwMDAgKiA2MDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnJlbGF0aXZlID0gYGp1c3Qgbm93YDtcclxuICAgICAgICAgICAgdXBkYXRlVGltZSA9IDEwMDAgKiAzMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnRpbWVySW50ZXJ2YWwgIT09IHVwZGF0ZVRpbWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudGltZXJJbnRlcnZhbCA9IHVwZGF0ZVRpbWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRpbWVyVW5zdWJzY3JpYmU/LigpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHVwZGF0ZVRpbWUgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50aW1lclVuc3Vic2NyaWJlID0gdGhpcy50aW1lclBvb2wuYWRkVGltZXIodXBkYXRlVGltZSwgKCkgPT4gdGhpcy51cGRhdGUoKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc2V0IHZhbHVlKHYpIHtcclxuICAgICAgICBpZiAodGhpcy5fdmFsdWUgIT09IHYpIHtcclxuICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSB2O1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufSJdfQ==
|
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
import { Pipe } from '@angular/core';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
import * as i1 from "@angular/platform-browser";
|
|
4
|
-
export class BantaTrustResourceUrlPipe {
|
|
5
|
-
constructor(sanitizer) {
|
|
6
|
-
this.sanitizer = sanitizer;
|
|
7
|
-
}
|
|
8
|
-
transform(value) {
|
|
9
|
-
if (!value)
|
|
10
|
-
return undefined;
|
|
11
|
-
return this.sanitizer.bypassSecurityTrustResourceUrl(value);
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
17
|
-
type: Pipe,
|
|
18
|
-
args: [{
|
|
19
|
-
name: 'trustResourceUrl'
|
|
20
|
-
}]
|
|
21
|
-
}], ctorParameters:
|
|
22
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
import { Pipe } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "@angular/platform-browser";
|
|
4
|
+
export class BantaTrustResourceUrlPipe {
|
|
5
|
+
constructor(sanitizer) {
|
|
6
|
+
this.sanitizer = sanitizer;
|
|
7
|
+
}
|
|
8
|
+
transform(value) {
|
|
9
|
+
if (!value)
|
|
10
|
+
return undefined;
|
|
11
|
+
return this.sanitizer.bypassSecurityTrustResourceUrl(value);
|
|
12
|
+
}
|
|
13
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: BantaTrustResourceUrlPipe, deps: [{ token: i1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
14
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.9", ngImport: i0, type: BantaTrustResourceUrlPipe, name: "trustResourceUrl" }); }
|
|
15
|
+
}
|
|
16
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: BantaTrustResourceUrlPipe, decorators: [{
|
|
17
|
+
type: Pipe,
|
|
18
|
+
args: [{
|
|
19
|
+
name: 'trustResourceUrl'
|
|
20
|
+
}]
|
|
21
|
+
}], ctorParameters: () => [{ type: i1.DomSanitizer }] });
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJ1c3QtcmVzb3VyY2UtdXJsLnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZGsvc3JjL2xpYi9jb21tb24vdHJ1c3QtcmVzb3VyY2UtdXJsLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7OztBQU1wRCxNQUFNLE9BQU8seUJBQXlCO0lBQ2xDLFlBQ1ksU0FBdUI7UUFBdkIsY0FBUyxHQUFULFNBQVMsQ0FBYztJQUVuQyxDQUFDO0lBRUQsU0FBUyxDQUFDLEtBQWE7UUFDbkIsSUFBSSxDQUFDLEtBQUs7WUFDTixPQUFPLFNBQVMsQ0FBQztRQUVyQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsOEJBQThCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEUsQ0FBQzs4R0FYUSx5QkFBeUI7NEdBQXpCLHlCQUF5Qjs7MkZBQXpCLHlCQUF5QjtrQkFIckMsSUFBSTttQkFBQztvQkFDRixJQUFJLEVBQUUsa0JBQWtCO2lCQUMzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XHJcblxyXG5AUGlwZSh7XHJcbiAgICBuYW1lOiAndHJ1c3RSZXNvdXJjZVVybCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEJhbnRhVHJ1c3RSZXNvdXJjZVVybFBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXJcclxuICAgICkge1xyXG4gICAgfVxyXG5cclxuICAgIHRyYW5zZm9ybSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKCF2YWx1ZSlcclxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RSZXNvdXJjZVVybCh2YWx1ZSk7XHJcbiAgICB9XHJcbn0iXX0=
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { Component, Output, ViewChild, Input } from '@angular/core';
|
|
2
|
+
import { Subject } from 'rxjs';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@angular/cdk/overlay";
|
|
5
|
+
import * as i2 from "@angular/material/icon";
|
|
6
|
+
import * as i3 from "@angular/material/button";
|
|
7
|
+
import * as i4 from "@angular/cdk/portal";
|
|
8
|
+
import * as i5 from "./emoji-selector-panel/emoji-selector-panel.component";
|
|
9
|
+
export class EmojiSelectorButtonComponent {
|
|
10
|
+
constructor(elementRef, overlay) {
|
|
11
|
+
this.elementRef = elementRef;
|
|
12
|
+
this.overlay = overlay;
|
|
13
|
+
this._selected = new Subject();
|
|
14
|
+
this.showEmojiPanel = false;
|
|
15
|
+
this.disabled = false;
|
|
16
|
+
this.overlayX = 'end';
|
|
17
|
+
this.overlayY = 'top';
|
|
18
|
+
this.originX = 'end';
|
|
19
|
+
this.originY = 'bottom';
|
|
20
|
+
}
|
|
21
|
+
get selected() {
|
|
22
|
+
return this._selected;
|
|
23
|
+
}
|
|
24
|
+
get isOpen() {
|
|
25
|
+
return this.overlayRef;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Insert the given emoji.
|
|
29
|
+
* @param str
|
|
30
|
+
*/
|
|
31
|
+
insert(str) {
|
|
32
|
+
this._selected.next(str);
|
|
33
|
+
this.close();
|
|
34
|
+
}
|
|
35
|
+
close() {
|
|
36
|
+
if (this.overlayRef) {
|
|
37
|
+
this.overlayRef.dispose();
|
|
38
|
+
this.overlayRef = null;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
show() {
|
|
42
|
+
if (this.isOpen) {
|
|
43
|
+
this.close();
|
|
44
|
+
}
|
|
45
|
+
this.overlayRef = this.overlay.create({
|
|
46
|
+
positionStrategy: this.overlay.position()
|
|
47
|
+
.flexibleConnectedTo(this.elementRef)
|
|
48
|
+
.withPositions([
|
|
49
|
+
{
|
|
50
|
+
originX: this.originX,
|
|
51
|
+
originY: this.originY,
|
|
52
|
+
overlayX: this.overlayX,
|
|
53
|
+
overlayY: this.overlayY
|
|
54
|
+
}
|
|
55
|
+
])
|
|
56
|
+
.withFlexibleDimensions(true),
|
|
57
|
+
hasBackdrop: true,
|
|
58
|
+
disposeOnNavigation: true,
|
|
59
|
+
scrollStrategy: this.overlay.scrollStrategies.reposition({
|
|
60
|
+
autoClose: true
|
|
61
|
+
})
|
|
62
|
+
});
|
|
63
|
+
this.overlayRef.backdropClick().subscribe(() => {
|
|
64
|
+
this.close();
|
|
65
|
+
});
|
|
66
|
+
this.overlayRef.keydownEvents().subscribe(event => {
|
|
67
|
+
if (event.key === 'Escape') {
|
|
68
|
+
this.close();
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
this.overlayRef.attach(this.selectorPanelTemplate);
|
|
72
|
+
}
|
|
73
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: EmojiSelectorButtonComponent, deps: [{ token: i0.ElementRef }, { token: i1.Overlay }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
74
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.9", type: EmojiSelectorButtonComponent, selector: "emoji-selector-button", inputs: { disabled: "disabled", overlayX: "overlayX", overlayY: "overlayY", originX: "originX", originY: "originY" }, outputs: { selected: "selected" }, viewQueries: [{ propertyName: "selectorPanelTemplate", first: true, predicate: ["selectorPanelTemplate"], descendants: true }], ngImport: i0, template: `
|
|
75
|
+
<button #button type="button" mat-icon-button (click)="show()" [disabled]="disabled">
|
|
76
|
+
<mat-icon>emoji_emotions</mat-icon>
|
|
77
|
+
</button>
|
|
78
|
+
<ng-template cdkPortal #selectorPanelTemplate="cdkPortal">
|
|
79
|
+
<emoji-selector-panel
|
|
80
|
+
#panel
|
|
81
|
+
(selected)="insert($event)"
|
|
82
|
+
></emoji-selector-panel>
|
|
83
|
+
</ng-template>
|
|
84
|
+
`, isInline: true, styles: [":host{display:block;position:relative}button{color:#666}\n"], dependencies: [{ kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: i4.CdkPortal, selector: "[cdkPortal]", exportAs: ["cdkPortal"] }, { kind: "component", type: i5.EmojiSelectorPanelComponent, selector: "emoji-selector-panel", outputs: ["selected"] }] }); }
|
|
85
|
+
}
|
|
86
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: EmojiSelectorButtonComponent, decorators: [{
|
|
87
|
+
type: Component,
|
|
88
|
+
args: [{ selector: 'emoji-selector-button', template: `
|
|
89
|
+
<button #button type="button" mat-icon-button (click)="show()" [disabled]="disabled">
|
|
90
|
+
<mat-icon>emoji_emotions</mat-icon>
|
|
91
|
+
</button>
|
|
92
|
+
<ng-template cdkPortal #selectorPanelTemplate="cdkPortal">
|
|
93
|
+
<emoji-selector-panel
|
|
94
|
+
#panel
|
|
95
|
+
(selected)="insert($event)"
|
|
96
|
+
></emoji-selector-panel>
|
|
97
|
+
</ng-template>
|
|
98
|
+
`, styles: [":host{display:block;position:relative}button{color:#666}\n"] }]
|
|
99
|
+
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1.Overlay }], propDecorators: { selectorPanelTemplate: [{
|
|
100
|
+
type: ViewChild,
|
|
101
|
+
args: ['selectorPanelTemplate']
|
|
102
|
+
}], selected: [{
|
|
103
|
+
type: Output
|
|
104
|
+
}], disabled: [{
|
|
105
|
+
type: Input
|
|
106
|
+
}], overlayX: [{
|
|
107
|
+
type: Input
|
|
108
|
+
}], overlayY: [{
|
|
109
|
+
type: Input
|
|
110
|
+
}], originX: [{
|
|
111
|
+
type: Input
|
|
112
|
+
}], originY: [{
|
|
113
|
+
type: Input
|
|
114
|
+
}] } });
|
|
115
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1vamktc2VsZWN0b3ItYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Nkay9zcmMvbGliL2Vtb2ppL2Vtb2ppLXNlbGVjdG9yLWJ1dHRvbi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsT0FBTyxFQUFFLFNBQVMsRUFBMkIsTUFBTSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0YsT0FBTyxFQUFFLE9BQU8sRUFBYyxNQUFNLE1BQU0sQ0FBQzs7Ozs7OztBQTJCM0MsTUFBTSxPQUFPLDRCQUE0QjtJQUNyQyxZQUNZLFVBQW1DLEVBQ25DLE9BQWdCO1FBRGhCLGVBQVUsR0FBVixVQUFVLENBQXlCO1FBQ25DLFlBQU8sR0FBUCxPQUFPLENBQVM7UUFNcEIsY0FBUyxHQUFHLElBQUksT0FBTyxFQUFVLENBQUM7UUFDMUMsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUE2QmQsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQixhQUFRLEdBQStCLEtBQUssQ0FBQztRQUM3QyxhQUFRLEdBQWdDLEtBQUssQ0FBQztRQUM5QyxZQUFPLEdBQStCLEtBQUssQ0FBQztRQUM1QyxZQUFPLEdBQWdDLFFBQVEsQ0FBQztJQXRDekQsQ0FBQztJQU9ELElBQ0ksUUFBUTtRQUNSLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUMxQixDQUFDO0lBSUQsSUFBSSxNQUFNO1FBQ04sT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQzNCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsR0FBRztRQUNOLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNqQixDQUFDO0lBRUQsS0FBSztRQUNELElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDM0IsQ0FBQztJQUNMLENBQUM7SUFRRCxJQUFJO1FBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDZCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDakIsQ0FBQztRQUVELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7WUFDbEMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUU7aUJBQ3BDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7aUJBQ3BDLGFBQWEsQ0FBQztnQkFDWDtvQkFDSSxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87b0JBQ3JCLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztvQkFDckIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO29CQUN2QixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7aUJBQzFCO2FBQ0osQ0FBQztpQkFDRCxzQkFBc0IsQ0FBQyxJQUFJLENBQUM7WUFDakMsV0FBVyxFQUFFLElBQUk7WUFDakIsbUJBQW1CLEVBQUUsSUFBSTtZQUN6QixjQUFjLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUM7Z0JBQ3JELFNBQVMsRUFBRSxJQUFJO2FBQ2xCLENBQUM7U0FDTCxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDM0MsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2pCLENBQUMsQ0FBQyxDQUFBO1FBRUYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDOUMsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUN6QixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDakIsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFDdkQsQ0FBQzs4R0EvRVEsNEJBQTRCO2tHQUE1Qiw0QkFBNEIsc1ZBdEIzQjs7Ozs7Ozs7OztLQVVUOzsyRkFZUSw0QkFBNEI7a0JBeEJ4QyxTQUFTOytCQUNJLHVCQUF1QixZQUN2Qjs7Ozs7Ozs7OztLQVVUO3FHQW1CbUMscUJBQXFCO3NCQUF4RCxTQUFTO3VCQUFDLHVCQUF1QjtnQkFNOUIsUUFBUTtzQkFEWCxNQUFNO2dCQTJCRSxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCJAdHlwZXMvcmVzaXplLW9ic2VydmVyLWJyb3dzZXJcIiAvPlxyXG5cclxuaW1wb3J0IHsgRmxleGlibGVDb25uZWN0ZWRQb3NpdGlvblN0cmF0ZWd5LCBPdmVybGF5LCBPdmVybGF5UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xyXG5pbXBvcnQgeyBDb21wb25lbnRQb3J0YWwsIFRlbXBsYXRlUG9ydGFsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSG9zdEJpbmRpbmcsIE91dHB1dCwgVmlld0NoaWxkLCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEVtb2ppU2VsZWN0b3JQYW5lbENvbXBvbmVudCB9IGZyb20gJy4vZW1vamktc2VsZWN0b3ItcGFuZWwvZW1vamktc2VsZWN0b3ItcGFuZWwuY29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdlbW9qaS1zZWxlY3Rvci1idXR0b24nLFxyXG4gICAgdGVtcGxhdGU6IGBcclxuICAgICAgICA8YnV0dG9uICNidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwic2hvdygpXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbj5lbW9qaV9lbW90aW9uczwvbWF0LWljb24+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlIGNka1BvcnRhbCAjc2VsZWN0b3JQYW5lbFRlbXBsYXRlPVwiY2RrUG9ydGFsXCI+XHJcbiAgICAgICAgICAgIDxlbW9qaS1zZWxlY3Rvci1wYW5lbCBcclxuICAgICAgICAgICAgICAgICNwYW5lbFxyXG4gICAgICAgICAgICAgICAgKHNlbGVjdGVkKT1cImluc2VydCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgID48L2Vtb2ppLXNlbGVjdG9yLXBhbmVsPlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICBgLFxyXG4gICAgc3R5bGVzOiBbYFxyXG4gICAgICAgIDpob3N0IHtcclxuICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGJ1dHRvbiB7XHJcbiAgICAgICAgICAgIGNvbG9yOiAjNjY2XHJcbiAgICAgICAgfVxyXG4gICAgYF1cclxufSlcclxuZXhwb3J0IGNsYXNzIEVtb2ppU2VsZWN0b3JCdXR0b25Db21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcclxuICAgICAgICBwcml2YXRlIG92ZXJsYXk6IE92ZXJsYXlcclxuICAgICkge1xyXG4gICAgfVxyXG5cclxuICAgIEBWaWV3Q2hpbGQoJ3NlbGVjdG9yUGFuZWxUZW1wbGF0ZScpIHNlbGVjdG9yUGFuZWxUZW1wbGF0ZTogVGVtcGxhdGVQb3J0YWw8YW55PjtcclxuXHJcbiAgICBwcml2YXRlIF9zZWxlY3RlZCA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcclxuICAgIHNob3dFbW9qaVBhbmVsID0gZmFsc2U7XHJcblxyXG4gICAgQE91dHB1dCgpXHJcbiAgICBnZXQgc2VsZWN0ZWQoKSA6IE9ic2VydmFibGU8c3RyaW5nPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgb3ZlcmxheVJlZjogT3ZlcmxheVJlZjtcclxuXHJcbiAgICBnZXQgaXNPcGVuKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm92ZXJsYXlSZWY7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnNlcnQgdGhlIGdpdmVuIGVtb2ppLlxyXG4gICAgICogQHBhcmFtIHN0ciBcclxuICAgICAqL1xyXG4gICAgaW5zZXJ0KHN0cikge1xyXG4gICAgICAgIHRoaXMuX3NlbGVjdGVkLm5leHQoc3RyKTtcclxuICAgICAgICB0aGlzLmNsb3NlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMub3ZlcmxheVJlZikge1xyXG4gICAgICAgICAgICB0aGlzLm92ZXJsYXlSZWYuZGlzcG9zZSgpO1xyXG4gICAgICAgICAgICB0aGlzLm92ZXJsYXlSZWYgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgQElucHV0KCkgb3ZlcmxheVg6ICdzdGFydCcgfCAnY2VudGVyJyB8ICdlbmQnID0gJ2VuZCc7XHJcbiAgICBASW5wdXQoKSBvdmVybGF5WTogJ3RvcCcgfCAnY2VudGVyJyB8ICdib3R0b20nID0gJ3RvcCc7XHJcbiAgICBASW5wdXQoKSBvcmlnaW5YOiAnc3RhcnQnIHwgJ2NlbnRlcicgfCAnZW5kJyA9ICdlbmQnO1xyXG4gICAgQElucHV0KCkgb3JpZ2luWTogJ3RvcCcgfCAnY2VudGVyJyB8ICdib3R0b20nID0gJ2JvdHRvbSc7XHJcblxyXG4gICAgc2hvdygpIHtcclxuICAgICAgICBpZiAodGhpcy5pc09wZW4pIHtcclxuICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5vdmVybGF5UmVmID0gdGhpcy5vdmVybGF5LmNyZWF0ZSh7XHJcbiAgICAgICAgICAgIHBvc2l0aW9uU3RyYXRlZ3k6IHRoaXMub3ZlcmxheS5wb3NpdGlvbigpXHJcbiAgICAgICAgICAgICAgICAuZmxleGlibGVDb25uZWN0ZWRUbyh0aGlzLmVsZW1lbnRSZWYpXHJcbiAgICAgICAgICAgICAgICAud2l0aFBvc2l0aW9ucyhbXHJcbiAgICAgICAgICAgICAgICAgICAgeyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luWDogdGhpcy5vcmlnaW5YLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luWTogdGhpcy5vcmlnaW5ZLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvdmVybGF5WDogdGhpcy5vdmVybGF5WCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmxheVk6IHRoaXMub3ZlcmxheVlcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBdKVxyXG4gICAgICAgICAgICAgICAgLndpdGhGbGV4aWJsZURpbWVuc2lvbnModHJ1ZSksXHJcbiAgICAgICAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxyXG4gICAgICAgICAgICBkaXNwb3NlT25OYXZpZ2F0aW9uOiB0cnVlLFxyXG4gICAgICAgICAgICBzY3JvbGxTdHJhdGVneTogdGhpcy5vdmVybGF5LnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbih7XHJcbiAgICAgICAgICAgICAgICBhdXRvQ2xvc2U6IHRydWVcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5vdmVybGF5UmVmLmJhY2tkcm9wQ2xpY2soKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNsb3NlKCk7XHJcbiAgICAgICAgfSlcclxuXHJcbiAgICAgICAgdGhpcy5vdmVybGF5UmVmLmtleWRvd25FdmVudHMoKS5zdWJzY3JpYmUoZXZlbnQgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnRXNjYXBlJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5vdmVybGF5UmVmLmF0dGFjaCh0aGlzLnNlbGVjdG9yUGFuZWxUZW1wbGF0ZSk7XHJcbiAgICB9XHJcbn0iXX0=
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { Component, Inject, Optional, Output } from '@angular/core';
|
|
2
|
+
import { BANTA_SDK_OPTIONS } from '../../sdk-options';
|
|
3
|
+
import { Subject } from 'rxjs';
|
|
4
|
+
import { EMOJIS } from '../emojis';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "@angular/platform-browser";
|
|
7
|
+
import * as i2 from "@angular/common";
|
|
8
|
+
import * as i3 from "@angular/forms";
|
|
9
|
+
import * as i4 from "@angular/material/icon";
|
|
10
|
+
import * as i5 from "@angular/material/button";
|
|
11
|
+
import * as i6 from "@angular/material/form-field";
|
|
12
|
+
import * as i7 from "@angular/material/input";
|
|
13
|
+
export class EmojiSelectorPanelComponent {
|
|
14
|
+
constructor(sanitizer, sdkOptions) {
|
|
15
|
+
this.sanitizer = sanitizer;
|
|
16
|
+
this.sdkOptions = sdkOptions;
|
|
17
|
+
this.activeCategory = 'people';
|
|
18
|
+
this.searchResults = [];
|
|
19
|
+
this.searchVisible = false;
|
|
20
|
+
this.selected = new Subject();
|
|
21
|
+
}
|
|
22
|
+
get searchQuery() {
|
|
23
|
+
return this._searchQuery;
|
|
24
|
+
}
|
|
25
|
+
set searchQuery(value) {
|
|
26
|
+
this._searchQuery = value;
|
|
27
|
+
setTimeout(() => {
|
|
28
|
+
this.searchResults = Object.keys(EMOJIS).filter(k => k.includes(value)).map(k => EMOJIS[k]);
|
|
29
|
+
this.searchResults.splice(50, this.searchResults.length);
|
|
30
|
+
console.log(`looking for '${value}' => ${this.searchResults.length} results`);
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
humanize(str) {
|
|
34
|
+
return str.replace(/(^| )[a-z]/g, k => k.toUpperCase()).replace(/_/g, ' ');
|
|
35
|
+
}
|
|
36
|
+
select(char) {
|
|
37
|
+
this.selected.next(char);
|
|
38
|
+
}
|
|
39
|
+
pairs(object) {
|
|
40
|
+
return Object.keys(object).map(key => [key, object[key]]);
|
|
41
|
+
}
|
|
42
|
+
hideSearch() {
|
|
43
|
+
// because of the "outside click detection"
|
|
44
|
+
setTimeout(() => {
|
|
45
|
+
this.searchVisible = false;
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
showSearch() {
|
|
49
|
+
// because of the "outside click detection"
|
|
50
|
+
setTimeout(() => {
|
|
51
|
+
this.searchVisible = true;
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
get emojiUrl() {
|
|
55
|
+
return this.sdkOptions?.emojiUrl ?? 'https://cdn.jsdelivr.net/gh/twitter/twemoji@14.0.2/assets/';
|
|
56
|
+
}
|
|
57
|
+
ngOnInit() {
|
|
58
|
+
let cats = {};
|
|
59
|
+
let categoryIcons = {
|
|
60
|
+
symbols: 'warning',
|
|
61
|
+
people: 'people',
|
|
62
|
+
animals_and_nature: 'nature',
|
|
63
|
+
travel_and_places: 'location_on',
|
|
64
|
+
activity: 'local_activity',
|
|
65
|
+
food_and_drink: 'restaurant',
|
|
66
|
+
objects: 'computer',
|
|
67
|
+
flags: 'flag'
|
|
68
|
+
};
|
|
69
|
+
for (let pair of this.pairs(EMOJIS)) {
|
|
70
|
+
let name = pair[0];
|
|
71
|
+
let emoji = pair[1];
|
|
72
|
+
if (!cats[emoji.category]) {
|
|
73
|
+
cats[emoji.category] = {
|
|
74
|
+
name: emoji.category,
|
|
75
|
+
icon: categoryIcons[emoji.category] || 'code',
|
|
76
|
+
emojis: []
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
emoji.html = this.sanitizer.bypassSecurityTrustHtml(twemoji.parse(emoji.char || '', { base: this.emojiUrl }));
|
|
80
|
+
cats[emoji.category].emojis.push(emoji);
|
|
81
|
+
}
|
|
82
|
+
this.categories = this.pairs(cats).map(pair => pair[1]);
|
|
83
|
+
}
|
|
84
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: EmojiSelectorPanelComponent, deps: [{ token: i1.DomSanitizer }, { token: BANTA_SDK_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
85
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.9", type: EmojiSelectorPanelComponent, selector: "emoji-selector-panel", outputs: { selected: "selected" }, ngImport: i0, template: "<div class=\"search-box\" *ngIf=\"searchVisible\">\r\n\t<a mat-icon-button href=\"javascript:;\" (click)=\"hideSearch()\">\r\n\t\t<mat-icon>arrow_back</mat-icon>\r\n\t</a>\r\n\t<mat-form-field appearance=\"outline\" floatLabel=\"always\">\r\n\t\t<mat-label>Search for emoji</mat-label>\r\n\t\t<input name=\"search\" type=\"text\" matInput placeholder=\"Start typing\" [(ngModel)]=\"searchQuery\" />\r\n\t</mat-form-field>\r\n</div>\r\n\r\n<div class=\"selector\">\r\n\t<ng-container *ngIf=\"searchVisible\">\r\n\t\t<div class=\"emoji-list\">\r\n\t\t\t<a href=\"javascript:;\" (click)=\"select(emoji.char)\" \r\n\t\t\t\t*ngFor=\"let emoji of searchResults\" [innerHtml]=\"emoji.html || ''\">\r\n\t\t\t</a>\r\n\t\t</div>\r\n\t</ng-container>\r\n\t<ng-container *ngIf=\"!searchVisible\">\r\n\t\t<div class=\"categories\">\r\n\t\t\t<ng-container *ngIf=\"!searchVisible\">\r\n\t\t\t\t<a [title]=\"humanize(category.name)\" [class.active]=\"activeCategory === category.name\" mat-icon-button *ngFor=\"let category of categories\" (click)=\"activeCategory = category.name\">\r\n\t\t\t\t\t<mat-icon>{{category.icon}}</mat-icon>\r\n\t\t\t\t</a>\r\n\r\n\t\t\t\t<a title=\"Search\" [class.active] mat-icon-button (click)=\"showSearch()\">\r\n\t\t\t\t\t<mat-icon>search</mat-icon>\r\n\t\t\t\t</a>\r\n\t\t\t</ng-container>\r\n\t\t</div>\r\n\t\t<ng-container *ngFor=\"let category of categories\">\r\n\t\t\t<div class=\"emoji-list\" *ngIf=\"activeCategory && activeCategory == category.name\">\r\n\t\t\t\t<a href=\"javascript:;\" (click)=\"select(emoji.char)\" \r\n\t\t\t\t\t*ngFor=\"let emoji of category.emojis\" [innerHtml]=\"emoji.html || ''\">\r\n\t\t\t\t</a>\r\n\t\t\t</div>\r\n\t\t</ng-container>\r\n\t</ng-container>\r\n</div>", styles: [":host{background:#111;color:#fff;border:1px solid #333;border-radius:5px;padding:.5em;width:calc(9*(32px + 1em));max-width:calc(100vw - 1.5em - 5px)}.selector{display:flex;flex-direction:column}.categories a{opacity:.25;transition:.4s opacity ease-in-out}.categories a:hover{opacity:.5}.categories a.active{opacity:1}.emoji-list{flex-grow:1;overflow-y:auto;height:20em}.emoji-list a{display:inline-block;padding:2px;margin:4px;background-color:#111}.emoji-list a ::ng-deep .emoji{width:32px;height:32px}.emoji-list a:hover{background-color:#333}.search-box{display:flex;align-items:baseline}.search-box mat-form-field{flex-grow:1}@media (max-width: 500px){.selector{flex-direction:row;height:27em}.emoji-list{height:auto}}:host-context(.banta-mobile) .selector{flex-direction:row;height:27em}:host-context(.banta-mobile) .emoji-list{height:auto}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { 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.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i5.MatIconAnchor, selector: "a[mat-icon-button]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i6.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6.MatLabel, selector: "mat-label" }, { kind: "directive", type: i7.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }] }); }
|
|
86
|
+
}
|
|
87
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: EmojiSelectorPanelComponent, decorators: [{
|
|
88
|
+
type: Component,
|
|
89
|
+
args: [{ selector: 'emoji-selector-panel', template: "<div class=\"search-box\" *ngIf=\"searchVisible\">\r\n\t<a mat-icon-button href=\"javascript:;\" (click)=\"hideSearch()\">\r\n\t\t<mat-icon>arrow_back</mat-icon>\r\n\t</a>\r\n\t<mat-form-field appearance=\"outline\" floatLabel=\"always\">\r\n\t\t<mat-label>Search for emoji</mat-label>\r\n\t\t<input name=\"search\" type=\"text\" matInput placeholder=\"Start typing\" [(ngModel)]=\"searchQuery\" />\r\n\t</mat-form-field>\r\n</div>\r\n\r\n<div class=\"selector\">\r\n\t<ng-container *ngIf=\"searchVisible\">\r\n\t\t<div class=\"emoji-list\">\r\n\t\t\t<a href=\"javascript:;\" (click)=\"select(emoji.char)\" \r\n\t\t\t\t*ngFor=\"let emoji of searchResults\" [innerHtml]=\"emoji.html || ''\">\r\n\t\t\t</a>\r\n\t\t</div>\r\n\t</ng-container>\r\n\t<ng-container *ngIf=\"!searchVisible\">\r\n\t\t<div class=\"categories\">\r\n\t\t\t<ng-container *ngIf=\"!searchVisible\">\r\n\t\t\t\t<a [title]=\"humanize(category.name)\" [class.active]=\"activeCategory === category.name\" mat-icon-button *ngFor=\"let category of categories\" (click)=\"activeCategory = category.name\">\r\n\t\t\t\t\t<mat-icon>{{category.icon}}</mat-icon>\r\n\t\t\t\t</a>\r\n\r\n\t\t\t\t<a title=\"Search\" [class.active] mat-icon-button (click)=\"showSearch()\">\r\n\t\t\t\t\t<mat-icon>search</mat-icon>\r\n\t\t\t\t</a>\r\n\t\t\t</ng-container>\r\n\t\t</div>\r\n\t\t<ng-container *ngFor=\"let category of categories\">\r\n\t\t\t<div class=\"emoji-list\" *ngIf=\"activeCategory && activeCategory == category.name\">\r\n\t\t\t\t<a href=\"javascript:;\" (click)=\"select(emoji.char)\" \r\n\t\t\t\t\t*ngFor=\"let emoji of category.emojis\" [innerHtml]=\"emoji.html || ''\">\r\n\t\t\t\t</a>\r\n\t\t\t</div>\r\n\t\t</ng-container>\r\n\t</ng-container>\r\n</div>", styles: [":host{background:#111;color:#fff;border:1px solid #333;border-radius:5px;padding:.5em;width:calc(9*(32px + 1em));max-width:calc(100vw - 1.5em - 5px)}.selector{display:flex;flex-direction:column}.categories a{opacity:.25;transition:.4s opacity ease-in-out}.categories a:hover{opacity:.5}.categories a.active{opacity:1}.emoji-list{flex-grow:1;overflow-y:auto;height:20em}.emoji-list a{display:inline-block;padding:2px;margin:4px;background-color:#111}.emoji-list a ::ng-deep .emoji{width:32px;height:32px}.emoji-list a:hover{background-color:#333}.search-box{display:flex;align-items:baseline}.search-box mat-form-field{flex-grow:1}@media (max-width: 500px){.selector{flex-direction:row;height:27em}.emoji-list{height:auto}}:host-context(.banta-mobile) .selector{flex-direction:row;height:27em}:host-context(.banta-mobile) .emoji-list{height:auto}\n"] }]
|
|
90
|
+
}], ctorParameters: () => [{ type: i1.DomSanitizer }, { type: undefined, decorators: [{
|
|
91
|
+
type: Inject,
|
|
92
|
+
args: [BANTA_SDK_OPTIONS]
|
|
93
|
+
}, {
|
|
94
|
+
type: Optional
|
|
95
|
+
}] }], propDecorators: { selected: [{
|
|
96
|
+
type: Output
|
|
97
|
+
}] } });
|
|
98
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1vamktc2VsZWN0b3ItcGFuZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2RrL3NyYy9saWIvZW1vamkvZW1vamktc2VsZWN0b3ItcGFuZWwvZW1vamktc2VsZWN0b3ItcGFuZWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2RrL3NyYy9saWIvZW1vamkvZW1vamktc2VsZWN0b3ItcGFuZWwvZW1vamktc2VsZWN0b3ItcGFuZWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQWlCLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkYsT0FBTyxFQUFFLGlCQUFpQixFQUFjLE1BQU0sbUJBQW1CLENBQUM7QUFDbEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQVMvQixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sV0FBVyxDQUFDOzs7Ozs7Ozs7QUFPbkMsTUFBTSxPQUFPLDJCQUEyQjtJQUV2QyxZQUNTLFNBQXdCLEVBRXhCLFVBQXNCO1FBRnRCLGNBQVMsR0FBVCxTQUFTLENBQWU7UUFFeEIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUkvQixtQkFBYyxHQUFZLFFBQVEsQ0FBQztRQUNuQyxrQkFBYSxHQUFXLEVBQUUsQ0FBQztRQUN4QixrQkFBYSxHQUFHLEtBQUssQ0FBQztRQUdqQixhQUFRLEdBQXFCLElBQUksT0FBTyxFQUFFLENBQUM7SUFSL0MsQ0FBQztJQVlMLElBQUksV0FBVztRQUNkLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBSSxXQUFXLENBQUMsS0FBSztRQUNwQixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztRQUMxQixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2YsSUFBSSxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM1RixJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN6RCxPQUFPLENBQUMsR0FBRyxDQUFDLGdCQUFnQixLQUFLLFFBQVEsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLFVBQVUsQ0FBQyxDQUFDO1FBQy9FLENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVELFFBQVEsQ0FBQyxHQUFZO1FBQ3BCLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUFFRCxNQUFNLENBQUMsSUFBYTtRQUNuQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRUQsS0FBSyxDQUFDLE1BQU07UUFDWCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRUQsVUFBVTtRQUNULDJDQUEyQztRQUNyQyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ1osSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7UUFDL0IsQ0FBQyxDQUFDLENBQUM7SUFDVixDQUFDO0lBRUUsVUFBVTtRQUNaLDJDQUEyQztRQUNyQyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ1osSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7UUFDOUIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUosSUFBWSxRQUFRO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFVBQVUsRUFBRSxRQUFRLElBQUksNERBQTRELENBQUM7SUFDbEcsQ0FBQztJQUVELFFBQVE7UUFFUCxJQUFJLElBQUksR0FBRyxFQUFFLENBQUM7UUFDZCxJQUFJLGFBQWEsR0FBRztZQUNuQixPQUFPLEVBQUUsU0FBUztZQUNsQixNQUFNLEVBQUUsUUFBUTtZQUNoQixrQkFBa0IsRUFBRSxRQUFRO1lBQzVCLGlCQUFpQixFQUFFLGFBQWE7WUFDaEMsUUFBUSxFQUFFLGdCQUFnQjtZQUMxQixjQUFjLEVBQUUsWUFBWTtZQUM1QixPQUFPLEVBQUUsVUFBVTtZQUNuQixLQUFLLEVBQUUsTUFBTTtTQUNiLENBQUM7UUFDRixLQUFLLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNyQyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbkIsSUFBSSxLQUFLLEdBQVcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRTVCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUc7b0JBQ3RCLElBQUksRUFBRSxLQUFLLENBQUMsUUFBUTtvQkFDcEIsSUFBSSxFQUFFLGFBQWEsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksTUFBTTtvQkFDN0MsTUFBTSxFQUFFLEVBQUU7aUJBQ1YsQ0FBQTtZQUNGLENBQUM7WUFFRCxLQUFLLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsdUJBQXVCLENBQ2xELE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQ3hELENBQUM7WUFFRixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekMsQ0FBQztRQUVELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6RCxDQUFDOzhHQTlGVywyQkFBMkIsOENBSTlCLGlCQUFpQjtrR0FKZCwyQkFBMkIsK0ZDdkJ4QywwckRBc0NNOzsyRkRmTywyQkFBMkI7a0JBTHZDLFNBQVM7K0JBQ0Msc0JBQXNCOzswQkFROUIsTUFBTTsyQkFBQyxpQkFBaUI7OzBCQUFHLFFBQVE7eUNBVTdCLFFBQVE7c0JBRGYsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImRlY2xhcmUgdmFyIHR3ZW1vamk6IHtcclxuICAgIHBhcnNlKHN0cjogc3RyaW5nLCBvcHRpb25zPzogeyBmb2xkZXI/OiBzdHJpbmcsIGV4dD86IHN0cmluZywgYmFzZT86IHN0cmluZyB9KTogc3RyaW5nO1xyXG59XHJcblxyXG5pbXBvcnQgeyBDb21wb25lbnQsIEluamVjdCwgSW5wdXQsIE9uSW5pdCwgT3B0aW9uYWwsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVIdG1sIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XHJcbmltcG9ydCB7IEJBTlRBX1NES19PUFRJT05TLCBTZGtPcHRpb25zIH0gZnJvbSAnLi4vLi4vc2RrLW9wdGlvbnMnO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcblxyXG5pbnRlcmZhY2UgRW1vamkge1xyXG5cdGtleXdvcmRzIDogc3RyaW5nW107XHJcblx0Y2hhciA6IHN0cmluZztcclxuXHRodG1sPyA6IFNhZmVIdG1sO1xyXG5cdGNhdGVnb3J5IDogc3RyaW5nO1xyXG59XHJcblxyXG5pbXBvcnQgeyBFTU9KSVMgfSBmcm9tICcuLi9lbW9qaXMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcblx0c2VsZWN0b3I6ICdlbW9qaS1zZWxlY3Rvci1wYW5lbCcsXHJcblx0dGVtcGxhdGVVcmw6ICcuL2Vtb2ppLXNlbGVjdG9yLXBhbmVsLmNvbXBvbmVudC5odG1sJyxcclxuXHRzdHlsZVVybHM6IFsnLi9lbW9qaS1zZWxlY3Rvci1wYW5lbC5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFbW9qaVNlbGVjdG9yUGFuZWxDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuXHRjb25zdHJ1Y3RvcihcclxuXHRcdHByaXZhdGUgc2FuaXRpemVyIDogRG9tU2FuaXRpemVyLFxyXG5cdFx0QEluamVjdChCQU5UQV9TREtfT1BUSU9OUykgQE9wdGlvbmFsKClcclxuXHRcdHByaXZhdGUgc2RrT3B0aW9uczogU2RrT3B0aW9uc1xyXG5cdCkgeyB9XHJcblxyXG5cdGNhdGVnb3JpZXMgOiBhbnlbXTtcclxuXHRhY3RpdmVDYXRlZ29yeSA6IHN0cmluZyA9ICdwZW9wbGUnO1xyXG5cdHNlYXJjaFJlc3VsdHMgOiBhbnlbXSA9IFtdO1xyXG4gICAgc2VhcmNoVmlzaWJsZSA9IGZhbHNlO1xyXG5cdFxyXG5cdEBPdXRwdXQoKVxyXG5cdHByaXZhdGUgc2VsZWN0ZWQgOiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuXHRwcml2YXRlIF9zZWFyY2hRdWVyeSA6IHN0cmluZztcclxuXHJcblx0Z2V0IHNlYXJjaFF1ZXJ5KCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuX3NlYXJjaFF1ZXJ5O1xyXG5cdH1cclxuXHJcblx0c2V0IHNlYXJjaFF1ZXJ5KHZhbHVlKSB7XHJcblx0XHR0aGlzLl9zZWFyY2hRdWVyeSA9IHZhbHVlO1xyXG5cdFx0c2V0VGltZW91dCgoKSA9PiB7XHJcblx0XHRcdHRoaXMuc2VhcmNoUmVzdWx0cyA9IE9iamVjdC5rZXlzKEVNT0pJUykuZmlsdGVyKGsgPT4gay5pbmNsdWRlcyh2YWx1ZSkpLm1hcChrID0+IEVNT0pJU1trXSk7XHJcblx0XHRcdHRoaXMuc2VhcmNoUmVzdWx0cy5zcGxpY2UoNTAsIHRoaXMuc2VhcmNoUmVzdWx0cy5sZW5ndGgpO1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgbG9va2luZyBmb3IgJyR7dmFsdWV9JyA9PiAke3RoaXMuc2VhcmNoUmVzdWx0cy5sZW5ndGh9IHJlc3VsdHNgKTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0aHVtYW5pemUoc3RyIDogc3RyaW5nKSB7XHJcblx0XHRyZXR1cm4gc3RyLnJlcGxhY2UoLyhefCApW2Etel0vZywgayA9PiBrLnRvVXBwZXJDYXNlKCkpLnJlcGxhY2UoL18vZywgJyAnKTtcclxuXHR9XHJcblxyXG5cdHNlbGVjdChjaGFyIDogc3RyaW5nKSB7XHJcblx0XHR0aGlzLnNlbGVjdGVkLm5leHQoY2hhcik7XHJcblx0fVxyXG5cclxuXHRwYWlycyhvYmplY3QpIHtcclxuXHRcdHJldHVybiBPYmplY3Qua2V5cyhvYmplY3QpLm1hcChrZXkgPT4gW2tleSwgb2JqZWN0W2tleV1dKTtcclxuXHR9XHJcblxyXG5cdGhpZGVTZWFyY2goKSB7XHJcblx0XHQvLyBiZWNhdXNlIG9mIHRoZSBcIm91dHNpZGUgY2xpY2sgZGV0ZWN0aW9uXCJcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zZWFyY2hWaXNpYmxlID0gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcblx0fVxyXG5cdFxyXG4gICAgc2hvd1NlYXJjaCgpIHtcclxuXHRcdC8vIGJlY2F1c2Ugb2YgdGhlIFwib3V0c2lkZSBjbGljayBkZXRlY3Rpb25cIlxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaFZpc2libGUgPSB0cnVlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuXHRwcml2YXRlIGdldCBlbW9qaVVybCgpIHtcclxuXHRcdHJldHVybiB0aGlzLnNka09wdGlvbnM/LmVtb2ppVXJsID8/ICdodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvZ2gvdHdpdHRlci90d2Vtb2ppQDE0LjAuMi9hc3NldHMvJztcclxuXHR9XHJcblxyXG5cdG5nT25Jbml0KCkge1xyXG5cclxuXHRcdGxldCBjYXRzID0ge307XHJcblx0XHRsZXQgY2F0ZWdvcnlJY29ucyA9IHtcclxuXHRcdFx0c3ltYm9sczogJ3dhcm5pbmcnLFxyXG5cdFx0XHRwZW9wbGU6ICdwZW9wbGUnLFxyXG5cdFx0XHRhbmltYWxzX2FuZF9uYXR1cmU6ICduYXR1cmUnLFxyXG5cdFx0XHR0cmF2ZWxfYW5kX3BsYWNlczogJ2xvY2F0aW9uX29uJyxcclxuXHRcdFx0YWN0aXZpdHk6ICdsb2NhbF9hY3Rpdml0eScsXHJcblx0XHRcdGZvb2RfYW5kX2RyaW5rOiAncmVzdGF1cmFudCcsXHJcblx0XHRcdG9iamVjdHM6ICdjb21wdXRlcicsXHJcblx0XHRcdGZsYWdzOiAnZmxhZydcclxuXHRcdH07XHJcblx0XHRmb3IgKGxldCBwYWlyIG9mIHRoaXMucGFpcnMoRU1PSklTKSkge1xyXG5cdFx0XHRsZXQgbmFtZSA9IHBhaXJbMF07XHJcblx0XHRcdGxldCBlbW9qaSA6IEVtb2ppID0gcGFpclsxXTtcclxuXHJcblx0XHRcdGlmICghY2F0c1tlbW9qaS5jYXRlZ29yeV0pIHtcclxuXHRcdFx0XHRjYXRzW2Vtb2ppLmNhdGVnb3J5XSA9IHtcclxuXHRcdFx0XHRcdG5hbWU6IGVtb2ppLmNhdGVnb3J5LFxyXG5cdFx0XHRcdFx0aWNvbjogY2F0ZWdvcnlJY29uc1tlbW9qaS5jYXRlZ29yeV0gfHwgJ2NvZGUnLFxyXG5cdFx0XHRcdFx0ZW1vamlzOiBbXVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0ZW1vamkuaHRtbCA9IHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKFxyXG5cdFx0XHRcdHR3ZW1vamkucGFyc2UoZW1vamkuY2hhciB8fCAnJywgeyBiYXNlOiB0aGlzLmVtb2ppVXJsIH0pXHJcblx0XHRcdCk7XHJcblxyXG5cdFx0XHRjYXRzW2Vtb2ppLmNhdGVnb3J5XS5lbW9qaXMucHVzaChlbW9qaSk7XHJcblx0XHR9XHJcblxyXG5cdFx0dGhpcy5jYXRlZ29yaWVzID0gdGhpcy5wYWlycyhjYXRzKS5tYXAocGFpciA9PiBwYWlyWzFdKTtcclxuXHR9XHJcblxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJzZWFyY2gtYm94XCIgKm5nSWY9XCJzZWFyY2hWaXNpYmxlXCI+XHJcblx0PGEgbWF0LWljb24tYnV0dG9uIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiAoY2xpY2spPVwiaGlkZVNlYXJjaCgpXCI+XHJcblx0XHQ8bWF0LWljb24+YXJyb3dfYmFjazwvbWF0LWljb24+XHJcblx0PC9hPlxyXG5cdDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGZsb2F0TGFiZWw9XCJhbHdheXNcIj5cclxuXHRcdDxtYXQtbGFiZWw+U2VhcmNoIGZvciBlbW9qaTwvbWF0LWxhYmVsPlxyXG5cdFx0PGlucHV0IG5hbWU9XCJzZWFyY2hcIiB0eXBlPVwidGV4dFwiIG1hdElucHV0IHBsYWNlaG9sZGVyPVwiU3RhcnQgdHlwaW5nXCIgWyhuZ01vZGVsKV09XCJzZWFyY2hRdWVyeVwiIC8+XHJcblx0PC9tYXQtZm9ybS1maWVsZD5cclxuPC9kaXY+XHJcblxyXG48ZGl2IGNsYXNzPVwic2VsZWN0b3JcIj5cclxuXHQ8bmctY29udGFpbmVyICpuZ0lmPVwic2VhcmNoVmlzaWJsZVwiPlxyXG5cdFx0PGRpdiBjbGFzcz1cImVtb2ppLWxpc3RcIj5cclxuXHRcdFx0PGEgaHJlZj1cImphdmFzY3JpcHQ6O1wiIChjbGljayk9XCJzZWxlY3QoZW1vamkuY2hhcilcIiBcclxuXHRcdFx0XHQqbmdGb3I9XCJsZXQgZW1vamkgb2Ygc2VhcmNoUmVzdWx0c1wiIFtpbm5lckh0bWxdPVwiZW1vamkuaHRtbCB8fCAnJ1wiPlxyXG5cdFx0XHQ8L2E+XHJcblx0XHQ8L2Rpdj5cclxuXHQ8L25nLWNvbnRhaW5lcj5cclxuXHQ8bmctY29udGFpbmVyICpuZ0lmPVwiIXNlYXJjaFZpc2libGVcIj5cclxuXHRcdDxkaXYgY2xhc3M9XCJjYXRlZ29yaWVzXCI+XHJcblx0XHRcdDxuZy1jb250YWluZXIgKm5nSWY9XCIhc2VhcmNoVmlzaWJsZVwiPlxyXG5cdFx0XHRcdDxhIFt0aXRsZV09XCJodW1hbml6ZShjYXRlZ29yeS5uYW1lKVwiIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlQ2F0ZWdvcnkgPT09IGNhdGVnb3J5Lm5hbWVcIiBtYXQtaWNvbi1idXR0b24gKm5nRm9yPVwibGV0IGNhdGVnb3J5IG9mIGNhdGVnb3JpZXNcIiAoY2xpY2spPVwiYWN0aXZlQ2F0ZWdvcnkgPSBjYXRlZ29yeS5uYW1lXCI+XHJcblx0XHRcdFx0XHQ8bWF0LWljb24+e3tjYXRlZ29yeS5pY29ufX08L21hdC1pY29uPlxyXG5cdFx0XHRcdDwvYT5cclxuXHJcblx0XHRcdFx0PGEgdGl0bGU9XCJTZWFyY2hcIiBbY2xhc3MuYWN0aXZlXSBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cInNob3dTZWFyY2goKVwiPlxyXG5cdFx0XHRcdFx0PG1hdC1pY29uPnNlYXJjaDwvbWF0LWljb24+XHJcblx0XHRcdFx0PC9hPlxyXG5cdFx0XHQ8L25nLWNvbnRhaW5lcj5cclxuXHRcdDwvZGl2PlxyXG5cdFx0PG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY2F0ZWdvcnkgb2YgY2F0ZWdvcmllc1wiPlxyXG5cdFx0XHQ8ZGl2IGNsYXNzPVwiZW1vamktbGlzdFwiICpuZ0lmPVwiYWN0aXZlQ2F0ZWdvcnkgJiYgYWN0aXZlQ2F0ZWdvcnkgPT0gY2F0ZWdvcnkubmFtZVwiPlxyXG5cdFx0XHRcdDxhIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiAoY2xpY2spPVwic2VsZWN0KGVtb2ppLmNoYXIpXCIgXHJcblx0XHRcdFx0XHQqbmdGb3I9XCJsZXQgZW1vamkgb2YgY2F0ZWdvcnkuZW1vamlzXCIgW2lubmVySHRtbF09XCJlbW9qaS5odG1sIHx8ICcnXCI+XHJcblx0XHRcdFx0PC9hPlxyXG5cdFx0XHQ8L2Rpdj5cclxuXHRcdDwvbmctY29udGFpbmVyPlxyXG5cdDwvbmctY29udGFpbmVyPlxyXG48L2Rpdj4iXX0=
|