@banta/sdk 4.0.18 → 4.1.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/bundles/banta-sdk.umd.js +71 -9
- package/bundles/banta-sdk.umd.js.map +1 -1
- package/bundles/banta-sdk.umd.min.js +1 -1
- package/bundles/banta-sdk.umd.min.js.map +1 -1
- package/esm2015/lib/comments/comment/comment.component.js +2 -2
- package/esm2015/lib/comments/comment-field/comment-field.component.js +8 -4
- package/esm2015/lib/common/common.module.js +4 -2
- package/esm2015/lib/common/index.js +2 -1
- package/esm2015/lib/common/markdown-to-html.pipe.js +58 -0
- package/fesm2015/banta-sdk.js +69 -8
- package/fesm2015/banta-sdk.js.map +1 -1
- package/lib/common/index.d.ts +1 -0
- package/lib/common/markdown-to-html.pipe.d.ts +9 -0
- package/package.json +6 -3
package/bundles/banta-sdk.umd.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
(function (global, factory) {
|
|
2
|
-
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('rxjs'), require('rxjs/operators'), require('@angular/core'), require('@angular/
|
|
3
|
-
typeof define === 'function' && define.amd ? define('@banta/sdk', ['exports', 'rxjs', 'rxjs/operators', '@angular/core', '@angular/
|
|
4
|
-
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory((global.banta = global.banta || {}, global.banta.sdk = {}), global.rxjs, global.rxjs.operators, global.ng.core, global.ng.
|
|
5
|
-
}(this, (function (exports, rxjs, operators, core,
|
|
2
|
+
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('rxjs'), require('rxjs/operators'), require('@angular/core'), require('marked'), require('dompurify'), require('@angular/platform-browser'), require('@angular/common'), require('@angular/material/icon'), require('@angular/material/button'), require('@angular/material/form-field'), require('@angular/material/input'), require('@angular/forms'), require('@angular/material/dialog'), require('@banta/common'), require('@angular/router'), require('@angular/material/snack-bar'), require('@angular/material/menu'), require('@angular/material/progress-spinner'), require('@angular/cdk/text-field'), require('@angular/material/tooltip'), require('@angular/material/select')) :
|
|
3
|
+
typeof define === 'function' && define.amd ? define('@banta/sdk', ['exports', 'rxjs', 'rxjs/operators', '@angular/core', 'marked', 'dompurify', '@angular/platform-browser', '@angular/common', '@angular/material/icon', '@angular/material/button', '@angular/material/form-field', '@angular/material/input', '@angular/forms', '@angular/material/dialog', '@banta/common', '@angular/router', '@angular/material/snack-bar', '@angular/material/menu', '@angular/material/progress-spinner', '@angular/cdk/text-field', '@angular/material/tooltip', '@angular/material/select'], factory) :
|
|
4
|
+
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory((global.banta = global.banta || {}, global.banta.sdk = {}), global.rxjs, global.rxjs.operators, global.ng.core, global.marked, global.DOMPurify, global.ng.platformBrowser, global.ng.common, global.ng.material.icon, global.ng.material.button, global.ng.material.formField, global.ng.material.input, global.ng.forms, global.ng.material.dialog, global.common$1, global.ng.router, global.ng.material.snackBar, global.ng.material.menu, global.ng.material.progressSpinner, global.ng.cdk.textField, global.ng.material.tooltip, global.ng.material.select));
|
|
5
|
+
}(this, (function (exports, rxjs, operators, core, marked, DOMPurify, platformBrowser, common, icon, button, formField, input, forms, dialog, common$1, router, snackBar, menu, progressSpinner, textField, tooltip, select) { 'use strict';
|
|
6
6
|
|
|
7
7
|
function lazyConnection(options) {
|
|
8
8
|
var obs = new rxjs.Observable(function (observer) {
|
|
@@ -151,9 +151,66 @@
|
|
|
151
151
|
containerElement: [{ type: core.ViewChild, args: ['container',] }]
|
|
152
152
|
};
|
|
153
153
|
|
|
154
|
+
var underline = {
|
|
155
|
+
name: 'underline',
|
|
156
|
+
level: 'inline',
|
|
157
|
+
start: function (src) { var _a; return (_a = src.match(/\+\+/)) === null || _a === void 0 ? void 0 : _a.index; },
|
|
158
|
+
tokenizer: function (src, tokens) {
|
|
159
|
+
var rule = /^\+\+(.*?)\+\+/; // Regex for the complete token
|
|
160
|
+
var match = rule.exec(src);
|
|
161
|
+
if (match) {
|
|
162
|
+
return {
|
|
163
|
+
type: 'underline',
|
|
164
|
+
raw: match[0],
|
|
165
|
+
text: this.lexer.inlineTokens(match[1].trim()),
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
},
|
|
169
|
+
renderer: function (token) {
|
|
170
|
+
return "<u>" + this.parser.parseInline(token.text) + "</u>";
|
|
171
|
+
}
|
|
172
|
+
};
|
|
173
|
+
marked.marked.use({
|
|
174
|
+
extensions: [underline]
|
|
175
|
+
});
|
|
176
|
+
var BantaMarkdownToHtmlPipe = /** @class */ (function () {
|
|
177
|
+
function BantaMarkdownToHtmlPipe(sanitizer) {
|
|
178
|
+
var _this = this;
|
|
179
|
+
this.sanitizer = sanitizer;
|
|
180
|
+
this.renderer = new marked.Renderer({
|
|
181
|
+
headerPrefix: ''
|
|
182
|
+
});
|
|
183
|
+
var linkRenderer = this.renderer.link;
|
|
184
|
+
this.renderer.link = function (href, title, text) {
|
|
185
|
+
var html = linkRenderer.call(_this.renderer, href, title, text);
|
|
186
|
+
return html.replace(/^<a /, '<a target="_blank" rel="noopener" ');
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
BantaMarkdownToHtmlPipe.prototype.transform = function (value) {
|
|
190
|
+
if (!value)
|
|
191
|
+
return '';
|
|
192
|
+
return this.sanitizer.bypassSecurityTrustHtml(DOMPurify.sanitize(marked.marked.parse(value, {
|
|
193
|
+
renderer: this.renderer
|
|
194
|
+
}), {
|
|
195
|
+
FORBID_TAGS: ['h1', 'h2', 'h3', 'h4'],
|
|
196
|
+
KEEP_CONTENT: true
|
|
197
|
+
}));
|
|
198
|
+
};
|
|
199
|
+
return BantaMarkdownToHtmlPipe;
|
|
200
|
+
}());
|
|
201
|
+
BantaMarkdownToHtmlPipe.decorators = [
|
|
202
|
+
{ type: core.Pipe, args: [{
|
|
203
|
+
name: 'markdownToHtml'
|
|
204
|
+
},] }
|
|
205
|
+
];
|
|
206
|
+
BantaMarkdownToHtmlPipe.ctorParameters = function () { return [
|
|
207
|
+
{ type: platformBrowser.DomSanitizer }
|
|
208
|
+
]; };
|
|
209
|
+
|
|
154
210
|
var COMPONENTS = [
|
|
155
211
|
TimestampComponent,
|
|
156
|
-
LightboxComponent
|
|
212
|
+
LightboxComponent,
|
|
213
|
+
BantaMarkdownToHtmlPipe
|
|
157
214
|
];
|
|
158
215
|
var BantaCommonModule = /** @class */ (function () {
|
|
159
216
|
function BantaCommonModule() {
|
|
@@ -8345,7 +8402,7 @@
|
|
|
8345
8402
|
CommentComponent.decorators = [
|
|
8346
8403
|
{ type: core.Component, args: [{
|
|
8347
8404
|
selector: 'banta-comment',
|
|
8348
|
-
template: "\r\n<mat-menu #pointItemMenu=\"matMenu\">\r\n <button *ngIf=\"!mine\" mat-menu-item (click)=\"report()\">Report</button>\r\n <button *ngIf=\"mine\" [disabled]=\"!permissions?.canEdit\" mat-menu-item (click)=\"startEdit()\">Edit</button>\r\n <button *ngIf=\"mine\" [disabled]=\"!permissions?.canDelete\" mat-menu-item (click)=\"delete()\">Delete</button>\r\n</mat-menu>\r\n\r\n<div class=\"message-content\">\r\n <div class=\"user\">\r\n <a\r\n href=\"javascript:;\"\r\n class=\"avatar\"\r\n (click)=\"selectAvatar(message.user)\"\r\n [style.background-image]=\"avatarForUser(message.user)\"></a>\r\n <a href=\"javascript:;\" class=\"display-name\" (click)=\"selectUser()\">{{message.user.displayName}}</a>\r\n <a href=\"javascript:;\" class=\"username\" (click)=\"selectUsername(message.user)\">@{{message.user.username}}</a>\r\n <span class=\"user-tag\" *ngIf=\"message.user.tag\">{{message.user.tag}}</span>\r\n <span class=\"spacer\"></span>\r\n </div>\r\n <div class=\"content\" *ngIf=\"!editing\">\r\n
|
|
8405
|
+
template: "\r\n<mat-menu #pointItemMenu=\"matMenu\">\r\n <button *ngIf=\"!mine\" mat-menu-item (click)=\"report()\">Report</button>\r\n <button *ngIf=\"mine\" [disabled]=\"!permissions?.canEdit\" mat-menu-item (click)=\"startEdit()\">Edit</button>\r\n <button *ngIf=\"mine\" [disabled]=\"!permissions?.canDelete\" mat-menu-item (click)=\"delete()\">Delete</button>\r\n</mat-menu>\r\n\r\n<div class=\"message-content\">\r\n <div class=\"user\">\r\n <a\r\n href=\"javascript:;\"\r\n class=\"avatar\"\r\n (click)=\"selectAvatar(message.user)\"\r\n [style.background-image]=\"avatarForUser(message.user)\"></a>\r\n <a href=\"javascript:;\" class=\"display-name\" (click)=\"selectUser()\">{{message.user.displayName}}</a>\r\n <a href=\"javascript:;\" class=\"username\" (click)=\"selectUsername(message.user)\">@{{message.user.username}}</a>\r\n <span class=\"user-tag\" *ngIf=\"message.user.tag\">{{message.user.tag}}</span>\r\n <span class=\"spacer\"></span>\r\n </div>\r\n <div class=\"content\" *ngIf=\"!editing\">\r\n <span class=\"banta-message-content\" [innerHTML]=\"message.message | markdownToHtml\"></span>\r\n\r\n <ng-container *ngIf=\"message.attachments?.length > 0\">\r\n <banta-lightbox #lightbox></banta-lightbox>\r\n <div class=\"attachments-row\" [class.single]=\"message.attachments?.length === 1\" *ngIf=\"message.attachments && message.attachments?.length > 0\">\r\n <a \r\n href=\"javascript:;\" \r\n (click)=\"showLightbox(attachment)\"\r\n *ngFor=\"let attachment of message.attachments\" \r\n >\r\n <img [src]=\"attachment.url\" alt=\"\">\r\n </a>\r\n </div>\r\n </ng-container>\r\n\r\n <ul class=\"message-facts small\">\r\n <li *ngIf=\"message.edits?.length > 0\">(Edited)</li>\r\n </ul>\r\n </div>\r\n <div class=\"content\" *ngIf=\"editing\" style=\"padding-bottom: 2em;\">\r\n <div>\r\n <mat-form-field floatLabel=\"always\" appearance=\"outline\" style=\"width: 100%;\">\r\n <mat-label>Edit Message</mat-label>\r\n <textarea matInput [(ngModel)]=\"editedMessage\"></textarea>\r\n </mat-form-field>\r\n </div>\r\n <button mat-raised-button (click)=\"saveEdit()\">Save</button> \r\n <button mat-button (click)=\"endEditing()\">Cancel</button>\r\n </div>\r\n\r\n\r\n <div class=\"actions\">\r\n <banta-timestamp [value]=\"message.sentAt\"></banta-timestamp>\r\n <ul class=\"message-facts\">\r\n <li *ngIf=\"message.edits?.length > 0\">Edited</li>\r\n </ul>\r\n <div class=\"spacer\"></div>\r\n <div class=\"counted-action\" *ngIf=\"showReplyAction\">\r\n <div class=\"count-indicator\">\r\n {{message.submessages?.length || message.submessageCount || 0}}\r\n </div>\r\n <button mat-icon-button matTooltip=\"Comment\" matTooltipPosition=\"below\" (click)=\"select()\">\r\n <mat-icon [inline]=\"true\">comment</mat-icon>\r\n </button>\r\n </div>\r\n <div class=\"counted-action\" [class.active]=\"message.userState?.liked\">\r\n <div class=\"count-indicator\">\r\n {{message.likes}}\r\n </div>\r\n <button \r\n *ngIf=\"message.transientState?.liking\"\r\n mat-icon-button \r\n [disabled]=\"true\" \r\n [matTooltip]=\"upvoting ? 'Please wait...' : message.userState?.liked ? 'Unlike' : 'Like'\" \r\n matTooltipPosition=\"below\" \r\n >\r\n <mat-spinner [diameter]=\"15\" style=\"margin-left: 1em;\"></mat-spinner>\r\n </button>\r\n <button \r\n *ngIf=\"!message.transientState?.liking\"\r\n mat-icon-button \r\n [disabled]=\"!permissions?.canLike\" \r\n [matTooltip]=\"upvoting ? 'Please wait...' : 'Like'\" \r\n matTooltipPosition=\"below\" \r\n (click)=\"message.userState?.liked ? unlike() : like()\" \r\n >\r\n <mat-icon [inline]=\"true\">thumb_up</mat-icon>\r\n </button>\r\n </div>\r\n\r\n <div class=\"counted-action\">\r\n <button mat-icon-button matTooltip=\"Share this comment\" matTooltipPosition=\"below\" (click)=\"share()\">\r\n <mat-icon [inline]=\"true\" >share</mat-icon>\r\n </button>\r\n </div>\r\n\r\n <button mat-icon-button [matMenuTriggerFor]=\"pointItemMenu\">\r\n <mat-icon [inline]=\"true\">more_vert</mat-icon>\r\n </button>\r\n </div>\r\n</div>\r\n",
|
|
8349
8406
|
styles: ["@-webkit-keyframes comment-appear{0%{transform:translate(100vw)}to{transform:translate(0)}}@keyframes comment-appear{0%{transform:translate(100vw)}to{transform:translate(0)}}:host{display:flex;flex-direction:column;position:relative;padding:.5em;visibility:hidden}:host.new{visibility:visible;-webkit-animation-name:comment-appear;animation-name:comment-appear;-webkit-animation-duration:.4s;animation-duration:.4s;-webkit-animation-fill-mode:both;animation-fill-mode:both}:host.highlighted{background:#00223a;outline:2px solid #003277}:host.visible{visibility:visible}:host:hover{background:#eee}:host .message-content .content{margin-left:60px;margin-right:.5em}:host .message-content .attachments-row{margin-top:15px;display:flex;gap:10px}:host .message-content .attachments-row img{border-radius:10px;width:300px;max-width:100%;max-height:20em;-o-object-fit:cover;object-fit:cover}:host.abbreviated .message-content .content{text-overflow:ellipsis;overflow-y:hidden}:host .actions{display:flex;padding-right:10px;margin-left:60px;align-items:center}:host .actions button{color:#666;flex-shrink:0}:host .actions banta-timestamp{color:#666;font-size:10pt;flex-shrink:0}.user{position:relative;margin:1em 0 0;display:flex;align-items:center}.user .display-name,.user .username{z-index:1;position:relative;padding:0 0 0 1em;font-size:10pt;color:#000;margin:0 auto 0 0;display:block;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;max-width:100%;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;flex-shrink:1;flex-grow:0}.user .display-name.username.username.username,.user .username.username.username.username{color:#666}.avatar{height:48px;width:48px;background-position:50%;background-size:cover;background-color:#333;border-radius:100%;flex-shrink:0;flex-grow:0}.counted-action{display:flex;align-items:center}.counted-action.active .count-indicator,.counted-action.active button{color:#00a5ff}.count-indicator{font-size:9pt;padding:0 0 0 3px;color:#666}:host-context(.mat-dark-theme) .count-indicator{border-color:#333}:host-context(.mat-dark-theme):hover{background:#060606}.user-tag,:host-context(.mat-dark-theme) .user .display-name,:host-context(.mat-dark-theme) .user .username{color:#fff}.user-tag{text-transform:uppercase;font-size:12px;border:1px solid #b27373;background:#7a412b;padding:3px 5px;margin:0 .5em 0 1em;border-radius:3px}.spacer{flex-shrink:1;flex-grow:1}ul.message-facts{margin:0;padding:0;color:#666}ul.message-facts li{list-style-type:none;border-left:1px solid #666;font-size:10pt;padding-left:.5em;margin-left:.5em}ul.message-facts.small{display:none}ul.message-facts.small li{margin-top:.5em}ul.message-facts.small li:first-child{border-left:1px solid transparent;margin-left:0;padding-left:0}@media (max-width:400px){.avatar{height:32px;width:32px}.actions ul.message-facts{display:none}ul.message-facts.small{display:initial}:host .actions{margin-left:0;margin-top:.5em}:host .message-content .content{margin-left:44px;margin-right:.5em}}:host-context(.banta-mobile) .avatar{height:32px;width:32px}:host-context(.banta-mobile) .actions ul.message-facts{display:none}:host-context(.banta-mobile) ul.message-facts.small{display:initial}:host-context(.banta-mobile) :host .actions{margin-left:0;margin-top:.5em}:host-context(.banta-mobile) :host .message-content .content{margin-left:44px;margin-right:.5em}"]
|
|
8350
8407
|
},] }
|
|
8351
8408
|
];
|
|
@@ -9627,8 +9684,12 @@
|
|
|
9627
9684
|
});
|
|
9628
9685
|
Object.defineProperty(CommentFieldComponent.prototype, "sendButtonEnabled", {
|
|
9629
9686
|
get: function () {
|
|
9630
|
-
|
|
9631
|
-
|
|
9687
|
+
if (!this.canComment) {
|
|
9688
|
+
// In this case, we want to enable the button because we want to be able to
|
|
9689
|
+
// send the permissionDenied message up to the host.
|
|
9690
|
+
return true;
|
|
9691
|
+
}
|
|
9692
|
+
return this.isValidMessage
|
|
9632
9693
|
&& !this.hasPendingAttachments
|
|
9633
9694
|
&& !this.sending;
|
|
9634
9695
|
},
|
|
@@ -9790,7 +9851,7 @@
|
|
|
9790
9851
|
case 1:
|
|
9791
9852
|
_b.trys.push([1, , 7, 8]);
|
|
9792
9853
|
text = (this.text || '').trim();
|
|
9793
|
-
if (!this.isValidMessage)
|
|
9854
|
+
if (this.canComment && !this.isValidMessage)
|
|
9794
9855
|
return [2 /*return*/];
|
|
9795
9856
|
message = {
|
|
9796
9857
|
user: this.user,
|
|
@@ -10471,6 +10532,7 @@
|
|
|
10471
10532
|
exports.BantaCommonModule = BantaCommonModule;
|
|
10472
10533
|
exports.BantaComponent = BantaComponent;
|
|
10473
10534
|
exports.BantaLogoComponent = BantaLogoComponent;
|
|
10535
|
+
exports.BantaMarkdownToHtmlPipe = BantaMarkdownToHtmlPipe;
|
|
10474
10536
|
exports.BantaSdkModule = BantaSdkModule;
|
|
10475
10537
|
exports.ChatBackend = ChatBackend;
|
|
10476
10538
|
exports.ChatBackendBase = ChatBackendBase;
|