@banta/sdk 4.0.1 → 4.0.2

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.
@@ -7863,8 +7863,8 @@
7863
7863
  BantaChatComponent.prototype.showSignIn = function () {
7864
7864
  this._signInSelected.next();
7865
7865
  };
7866
- BantaChatComponent.prototype.sendPermissionError = function () {
7867
- this._permissionDeniedError.next();
7866
+ BantaChatComponent.prototype.sendPermissionError = function (message) {
7867
+ this._permissionDeniedError.next(message);
7868
7868
  };
7869
7869
  BantaChatComponent.prototype.insertEmoji = function (emoji) {
7870
7870
  var message = this.newMessage.message || '';
@@ -8684,9 +8684,8 @@
8684
8684
  return [2 /*return*/, true];
8685
8685
  case 4:
8686
8686
  e_1 = _d.sent();
8687
- console.error("Failed to send message: ", message);
8688
- console.error(e_1);
8689
- throw new Error("Could not send: " + e_1.message);
8687
+ this.handleBackendException(e_1, 'Could not send: ');
8688
+ return [3 /*break*/, 5];
8690
8689
  case 5: return [2 /*return*/];
8691
8690
  }
8692
8691
  });
@@ -8708,20 +8707,41 @@
8708
8707
  case 3: return [2 /*return*/, true];
8709
8708
  case 4:
8710
8709
  e_2 = _d.sent();
8711
- console.error("Failed to send message: ", message);
8712
- console.error(e_2);
8713
- throw new Error("Could not send reply: " + e_2.message);
8710
+ this.handleBackendException(e_2, 'Could not send reply: ');
8711
+ return [3 /*break*/, 5];
8714
8712
  case 5: return [2 /*return*/];
8715
8713
  }
8716
8714
  });
8717
8715
  }); };
8718
8716
  }
8717
+ BantaCommentsComponent.prototype.handleBackendExceptionAsAlert = function (e, prefix) {
8718
+ if (prefix === void 0) { prefix = ''; }
8719
+ try {
8720
+ this.handleBackendException(e, prefix);
8721
+ }
8722
+ catch (e) {
8723
+ alert(e.message);
8724
+ }
8725
+ };
8726
+ BantaCommentsComponent.prototype.handleBackendException = function (e, prefix) {
8727
+ if (prefix === void 0) { prefix = ''; }
8728
+ var errorMessage = e.message;
8729
+ if (errorMessage.startsWith('permission-denied|')) {
8730
+ errorMessage = errorMessage.replace(/^permission-denied\|/, '');
8731
+ if (errorMessage.startsWith("app-handle|")) {
8732
+ // If this is an error during authorizeAction on the backend, pass control to the user-provided
8733
+ // permission-denied handler.
8734
+ this.sendPermissionDenied(errorMessage.replace(/^app-handle\|/, ''));
8735
+ return;
8736
+ }
8737
+ }
8738
+ throw new Error("" + prefix + errorMessage);
8739
+ };
8719
8740
  // Lifecycle Events / Initialization
8720
8741
  BantaCommentsComponent.prototype.ngOnInit = function () {
8721
8742
  var _this = this;
8722
8743
  this._subs.add(this.backend.userChanged.subscribe(function (user) { return _this.user = user; }));
8723
8744
  this.startLoading();
8724
- console.log("Checking...");
8725
8745
  if (typeof window !== 'undefined') {
8726
8746
  var queryString = window.location.search.substring(1);
8727
8747
  var query = queryString.split('&')
@@ -8730,8 +8750,6 @@
8730
8750
  var _e = __read(_d, 2), k = _e[0], v = _e[1];
8731
8751
  return (o[k] = v, o);
8732
8752
  }, {});
8733
- console.log('here:');
8734
- console.dir(query);
8735
8753
  var commentID = query['comment'];
8736
8754
  if (commentID) {
8737
8755
  this.sharedCommentID = commentID;
@@ -8828,7 +8846,7 @@
8828
8846
  };
8829
8847
  BantaCommentsComponent.prototype.updateLoading = function () {
8830
8848
  var _this = this;
8831
- var _a, _b, _c;
8849
+ var _a, _b;
8832
8850
  if (((_a = this.source) === null || _a === void 0 ? void 0 : _a.state) && ((_b = this.source) === null || _b === void 0 ? void 0 : _b.state) !== 'connecting') {
8833
8851
  clearInterval(this._loadingTimer);
8834
8852
  this.loadingMessage = "Here we go!";
@@ -8837,7 +8855,6 @@
8837
8855
  }, 750);
8838
8856
  return true;
8839
8857
  }
8840
- console.log("[Banta] Status check: " + (((_c = this.source) === null || _c === void 0 ? void 0 : _c.state) || 'connecting'));
8841
8858
  var messageSwitchTime = 5 * 1000;
8842
8859
  if (this.messageChangedAt + messageSwitchTime < Date.now()) {
8843
8860
  if (this.loadingMessages[this._loadingMessageIndex]) {
@@ -8940,7 +8957,6 @@
8940
8957
  BantaCommentsComponent.prototype.scrollToComment = function (commentId) {
8941
8958
  setTimeout(function () {
8942
8959
  var comment = document.querySelectorAll("[data-comment-id=\"" + commentId + "\"]");
8943
- console.dir(comment);
8944
8960
  if (comment.length > 0) {
8945
8961
  // comment.item(0).scroll({behavior: 'smooth'});
8946
8962
  comment.item(0).scrollIntoView();
@@ -9007,8 +9023,8 @@
9007
9023
  });
9008
9024
  });
9009
9025
  };
9010
- BantaCommentsComponent.prototype.showPermissionDenied = function () {
9011
- this._permissionDeniedError.next();
9026
+ BantaCommentsComponent.prototype.sendPermissionDenied = function (message) {
9027
+ this._permissionDeniedError.next(message);
9012
9028
  };
9013
9029
  BantaCommentsComponent.prototype.scrollToMessage = function (message) {
9014
9030
  var el = this.elementRef.nativeElement.querySelector("[data-comment-id=\"" + message.id + "\"]");
@@ -9045,8 +9061,8 @@
9045
9061
  return [3 /*break*/, 4];
9046
9062
  case 3:
9047
9063
  e_4 = _d.sent();
9048
- alert("Could not like this message: " + e_4.message);
9049
- return [2 /*return*/];
9064
+ this.handleBackendExceptionAsAlert(e_4, 'Could not like this message: ');
9065
+ return [3 /*break*/, 4];
9050
9066
  case 4: return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(function () { return resolve(); }, 250); })];
9051
9067
  case 5:
9052
9068
  _d.sent();
@@ -9076,7 +9092,7 @@
9076
9092
  return [3 /*break*/, 4];
9077
9093
  case 3:
9078
9094
  e_5 = _d.sent();
9079
- alert("Failed to unlike message: " + e_5.message);
9095
+ this.handleBackendExceptionAsAlert(e_5, 'Failed to unlike this message: ');
9080
9096
  return [3 /*break*/, 4];
9081
9097
  case 4: return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(function () { return resolve(); }, 250); })];
9082
9098
  case 5:
@@ -9188,17 +9204,31 @@
9188
9204
  };
9189
9205
  BantaCommentsComponent.prototype.deleteMessage = function (message) {
9190
9206
  return __awaiter(this, void 0, void 0, function () {
9207
+ var e_6;
9191
9208
  return __generator(this, function (_d) {
9192
- if (!confirm("Are you sure you want to delete this comment? You cannot undo this action."))
9193
- return [2 /*return*/];
9194
- this.source.deleteMessage(message.id);
9195
- return [2 /*return*/];
9209
+ switch (_d.label) {
9210
+ case 0:
9211
+ if (!confirm("Are you sure you want to delete this comment? You cannot undo this action."))
9212
+ return [2 /*return*/];
9213
+ _d.label = 1;
9214
+ case 1:
9215
+ _d.trys.push([1, 3, , 4]);
9216
+ return [4 /*yield*/, this.source.deleteMessage(message.id)];
9217
+ case 2:
9218
+ _d.sent();
9219
+ return [3 /*break*/, 4];
9220
+ case 3:
9221
+ e_6 = _d.sent();
9222
+ this.handleBackendExceptionAsAlert(e_6, "Could not delete message: ");
9223
+ return [3 /*break*/, 4];
9224
+ case 4: return [2 /*return*/];
9225
+ }
9196
9226
  });
9197
9227
  });
9198
9228
  };
9199
9229
  BantaCommentsComponent.prototype.editMessage = function (source, message, newText) {
9200
9230
  return __awaiter(this, void 0, void 0, function () {
9201
- var e_6;
9231
+ var e_7;
9202
9232
  return __generator(this, function (_d) {
9203
9233
  switch (_d.label) {
9204
9234
  case 0:
@@ -9208,8 +9238,8 @@
9208
9238
  _d.sent();
9209
9239
  return [3 /*break*/, 3];
9210
9240
  case 2:
9211
- e_6 = _d.sent();
9212
- alert(e_6.message);
9241
+ e_7 = _d.sent();
9242
+ this.handleBackendExceptionAsAlert(e_7, 'Could not edit this message: ');
9213
9243
  return [2 /*return*/];
9214
9244
  case 3:
9215
9245
  message.message = newText;
@@ -9230,7 +9260,7 @@
9230
9260
  };
9231
9261
  BantaCommentsComponent.prototype.saveEdit = function (message, text) {
9232
9262
  return __awaiter(this, void 0, void 0, function () {
9233
- var e_7;
9263
+ var e_8;
9234
9264
  return __generator(this, function (_d) {
9235
9265
  switch (_d.label) {
9236
9266
  case 0:
@@ -9241,8 +9271,8 @@
9241
9271
  message.transientState.editing = false;
9242
9272
  return [3 /*break*/, 3];
9243
9273
  case 2:
9244
- e_7 = _d.sent();
9245
- alert("Could not edit message: " + e_7.message);
9274
+ e_8 = _d.sent();
9275
+ this.handleBackendExceptionAsAlert(e_8, "Could not edit message: ");
9246
9276
  return [3 /*break*/, 3];
9247
9277
  case 3: return [2 /*return*/];
9248
9278
  }
@@ -9254,7 +9284,7 @@
9254
9284
  BantaCommentsComponent.decorators = [
9255
9285
  { type: core.Component, args: [{
9256
9286
  selector: 'banta-comments',
9257
- template: "<ng-container *ngIf=\"loading\">\r\n <div class=\"loading-screen\" [class.visible]=\"showLoadingScreen\">\r\n <h1>Loading Comments</h1>\r\n <div>\r\n <mat-spinner [diameter]=\"300\" [strokeWidth]=\"2\"></mat-spinner>\r\n </div>\r\n\r\n <p class=\"loading-message\" [class.visible]=\"loadingMessageVisible\">{{loadingMessage}}</p>\r\n </div>\r\n</ng-container>\r\n<ng-container *ngIf=\"!loading\">\r\n <div class=\"focused\" [class.visible]=\"selectedMessageVisible\" *ngIf=\"selectedMessage\">\r\n\r\n <div>\r\n <a mat-button href=\"javascript:;\" (click)=\"unselectMessage()\">\r\n <mat-icon>arrow_back</mat-icon>\r\n Latest Comments\r\n </a>\r\n </div>\r\n\r\n <banta-comment\r\n [message]=\"selectedMessage\"\r\n [liking]=\"selectedMessage.transientState.liking\"\r\n [mine]=\"user?.id === selectedMessage.user?.id\"\r\n [permissions]=\"source?.permissions\"\r\n [showReplyAction]=\"false\"\r\n [editing]=\"selectedMessage.transientState.editing\"\r\n (editStarted)=\"startEditing(selectedMessage)\"\r\n (editEnded)=\"selectedMessage.transientState.editing = false\"\r\n (edited)=\"saveEdit(selectedMessage, $event)\"\r\n (userSelected)=\"selectMessageUser(selectedMessage)\"\r\n (avatarSelected)=\"selectAvatar($event)\"\r\n (usernameSelected)=\"selectUsername($event)\"\r\n (liked)=\"likeMessage(source, selectedMessage)\"\r\n (unliked)=\"unlikeMessage(source, selectedMessage)\"\r\n (reported)=\"reportMessage(selectedMessage)\"\r\n (selected)=\"selectMessage(selectedMessage)\"\r\n (shared)=\"shareMessage($event)\"\r\n (deleted)=\"deleteMessage(selectedMessage)\"\r\n ></banta-comment>\r\n\r\n <div class=\"replies\">\r\n\r\n <ng-container *ngIf=\"!selectedMessageThread\">\r\n <div class=\"loading\">\r\n <mat-spinner></mat-spinner>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"selectedMessageThread\">\r\n <banta-comment-view\r\n [source]=\"selectedMessageThread\"\r\n [allowReplies]=\"false\"\r\n [fixedHeight]=\"false\"\r\n [showEmptyState]=\"false\"\r\n [newestLast]=\"true\"\r\n (liked)=\"likeMessage(selectedMessageThread, $event)\"\r\n (unliked)=\"unlikeMessage(selectedMessageThread, $event)\"\r\n (messageEdited)=\"editMessage(selectedMessageThread, $event.message, $event.newMessage)\"\r\n (reported)=\"reportMessage($event)\"\r\n (usernameSelected)=\"selectUsername($event)\"\r\n (avatarSelected)=\"selectAvatar($event)\"\r\n (shared)=\"shareMessage($event)\"\r\n (deleted)=\"deleteMessage($event)\"\r\n ></banta-comment-view>\r\n\r\n <banta-comment-field\r\n [sendLabel]=\"replyLabel\"\r\n [sendingLabel]=\"sendingLabel\"\r\n [hashtags]=\"hashtags\"\r\n [participants]=\"participants\"\r\n (signInSelected)=\"showSignIn()\"\r\n (editAvatarSelected)=\"showEditAvatar()\"\r\n [source]=\"selectedMessageThread\"\r\n [canComment]=\"source?.permissions?.canPost\"\r\n [signInLabel]=\"signInLabel\"\r\n [permissionDeniedLabel]=\"permissionDeniedLabel\"\r\n (permissionDeniedError)=\"showPermissionDenied()\"\r\n [shouldInterceptMessageSend]=\"shouldInterceptMessageSend\"\r\n [user]=\"user\"\r\n [label]=\"postReplyLabel\"\r\n [submit]=\"sendReply\"\r\n >\r\n <ng-content select=\".reply-send-options\"></ng-content>\r\n </banta-comment-field>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n <div class=\"main\" [class.hidden]=\"selectedMessage\">\r\n <banta-comment-field\r\n [source]=\"source\"\r\n [user]=\"user\"\r\n [sendLabel]=\"sendLabel\"\r\n [sendingLabel]=\"sendingLabel\"\r\n [signInLabel]=\"signInLabel\"\r\n [canComment]=\"source?.permissions?.canPost\"\r\n [hashtags]=\"hashtags\"\r\n [participants]=\"participants\"\r\n [label]=\"postCommentLabel\"\r\n (editAvatarSelected)=\"showEditAvatar()\"\r\n (signInSelected)=\"showSignIn()\"\r\n [permissionDeniedLabel]=\"permissionDeniedLabel\"\r\n (permissionDeniedError)=\"showPermissionDenied()\"\r\n [shouldInterceptMessageSend]=\"shouldInterceptMessageSend\"\r\n [submit]=\"sendMessage\"\r\n >\r\n \r\n </banta-comment-field>\r\n\r\n <banta-comment-sort\r\n [(sort)]=\"sortOrder\"></banta-comment-sort>\r\n\r\n <banta-comment-view\r\n [class.faded]=\"selectedMessage\"\r\n [source]=\"source\"\r\n [fixedHeight]=\"fixedHeight\"\r\n [maxMessages]=\"maxMessages\"\r\n [maxVisibleMessages]=\"maxVisibleMessages\"\r\n [genericAvatarUrl]=\"genericAvatarUrl\"\r\n (userSelected)=\"selectMessageUser($event)\"\r\n (sortOrderChanged)=\"sortOrder = $event\"\r\n (selected)=\"selectMessage($event)\"\r\n (liked)=\"likeMessage(source, $event)\"\r\n (unliked)=\"unlikeMessage(source, $event)\"\r\n (messageEdited)=\"editMessage(source, $event.message, $event.newMessage)\"\r\n (reported)=\"reportMessage($event)\"\r\n (usernameSelected)=\"selectUsername($event)\"\r\n (avatarSelected)=\"selectAvatar($event)\"\r\n (shared)=\"shareMessage($event)\"\r\n (deleted)=\"deleteMessage($event)\"\r\n ></banta-comment-view>\r\n </div>\r\n</ng-container>",
9287
+ template: "<ng-container *ngIf=\"loading\">\r\n <div class=\"loading-screen\" [class.visible]=\"showLoadingScreen\">\r\n <h1>Loading Comments</h1>\r\n <div>\r\n <mat-spinner [diameter]=\"300\" [strokeWidth]=\"2\"></mat-spinner>\r\n </div>\r\n\r\n <p class=\"loading-message\" [class.visible]=\"loadingMessageVisible\">{{loadingMessage}}</p>\r\n </div>\r\n</ng-container>\r\n<ng-container *ngIf=\"!loading\">\r\n <div class=\"focused\" [class.visible]=\"selectedMessageVisible\" *ngIf=\"selectedMessage\">\r\n\r\n <div>\r\n <a mat-button href=\"javascript:;\" (click)=\"unselectMessage()\">\r\n <mat-icon>arrow_back</mat-icon>\r\n Latest Comments\r\n </a>\r\n </div>\r\n\r\n <banta-comment\r\n [message]=\"selectedMessage\"\r\n [liking]=\"selectedMessage.transientState.liking\"\r\n [mine]=\"user?.id === selectedMessage.user?.id\"\r\n [permissions]=\"source?.permissions\"\r\n [showReplyAction]=\"false\"\r\n [editing]=\"selectedMessage.transientState.editing\"\r\n (editStarted)=\"startEditing(selectedMessage)\"\r\n (editEnded)=\"selectedMessage.transientState.editing = false\"\r\n (edited)=\"saveEdit(selectedMessage, $event)\"\r\n (userSelected)=\"selectMessageUser(selectedMessage)\"\r\n (avatarSelected)=\"selectAvatar($event)\"\r\n (usernameSelected)=\"selectUsername($event)\"\r\n (liked)=\"likeMessage(source, selectedMessage)\"\r\n (unliked)=\"unlikeMessage(source, selectedMessage)\"\r\n (reported)=\"reportMessage(selectedMessage)\"\r\n (selected)=\"selectMessage(selectedMessage)\"\r\n (shared)=\"shareMessage($event)\"\r\n (deleted)=\"deleteMessage(selectedMessage)\"\r\n ></banta-comment>\r\n\r\n <div class=\"replies\">\r\n\r\n <ng-container *ngIf=\"!selectedMessageThread\">\r\n <div class=\"loading\">\r\n <mat-spinner></mat-spinner>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"selectedMessageThread\">\r\n <banta-comment-view\r\n [source]=\"selectedMessageThread\"\r\n [allowReplies]=\"false\"\r\n [fixedHeight]=\"false\"\r\n [showEmptyState]=\"false\"\r\n [newestLast]=\"true\"\r\n (liked)=\"likeMessage(selectedMessageThread, $event)\"\r\n (unliked)=\"unlikeMessage(selectedMessageThread, $event)\"\r\n (messageEdited)=\"editMessage(selectedMessageThread, $event.message, $event.newMessage)\"\r\n (reported)=\"reportMessage($event)\"\r\n (usernameSelected)=\"selectUsername($event)\"\r\n (avatarSelected)=\"selectAvatar($event)\"\r\n (shared)=\"shareMessage($event)\"\r\n (deleted)=\"deleteMessage($event)\"\r\n ></banta-comment-view>\r\n\r\n <banta-comment-field\r\n [sendLabel]=\"replyLabel\"\r\n [sendingLabel]=\"sendingLabel\"\r\n [hashtags]=\"hashtags\"\r\n [participants]=\"participants\"\r\n (signInSelected)=\"showSignIn()\"\r\n (editAvatarSelected)=\"showEditAvatar()\"\r\n [source]=\"selectedMessageThread\"\r\n [canComment]=\"source?.permissions?.canPost\"\r\n [signInLabel]=\"signInLabel\"\r\n [permissionDeniedLabel]=\"permissionDeniedLabel\"\r\n (permissionDeniedError)=\"sendPermissionDenied($event)\"\r\n [shouldInterceptMessageSend]=\"shouldInterceptMessageSend\"\r\n [user]=\"user\"\r\n [label]=\"postReplyLabel\"\r\n [submit]=\"sendReply\"\r\n >\r\n <ng-content select=\".reply-send-options\"></ng-content>\r\n </banta-comment-field>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n <div class=\"main\" [class.hidden]=\"selectedMessage\">\r\n <banta-comment-field\r\n [source]=\"source\"\r\n [user]=\"user\"\r\n [sendLabel]=\"sendLabel\"\r\n [sendingLabel]=\"sendingLabel\"\r\n [signInLabel]=\"signInLabel\"\r\n [canComment]=\"source?.permissions?.canPost\"\r\n [hashtags]=\"hashtags\"\r\n [participants]=\"participants\"\r\n [label]=\"postCommentLabel\"\r\n (editAvatarSelected)=\"showEditAvatar()\"\r\n (signInSelected)=\"showSignIn()\"\r\n [permissionDeniedLabel]=\"permissionDeniedLabel\"\r\n (permissionDeniedError)=\"sendPermissionDenied($event)\"\r\n [shouldInterceptMessageSend]=\"shouldInterceptMessageSend\"\r\n [submit]=\"sendMessage\"\r\n >\r\n \r\n </banta-comment-field>\r\n\r\n <banta-comment-sort\r\n [(sort)]=\"sortOrder\"></banta-comment-sort>\r\n\r\n <banta-comment-view\r\n [class.faded]=\"selectedMessage\"\r\n [source]=\"source\"\r\n [fixedHeight]=\"fixedHeight\"\r\n [maxMessages]=\"maxMessages\"\r\n [maxVisibleMessages]=\"maxVisibleMessages\"\r\n [genericAvatarUrl]=\"genericAvatarUrl\"\r\n (userSelected)=\"selectMessageUser($event)\"\r\n (sortOrderChanged)=\"sortOrder = $event\"\r\n (selected)=\"selectMessage($event)\"\r\n (liked)=\"likeMessage(source, $event)\"\r\n (unliked)=\"unlikeMessage(source, $event)\"\r\n (messageEdited)=\"editMessage(source, $event.message, $event.newMessage)\"\r\n (reported)=\"reportMessage($event)\"\r\n (usernameSelected)=\"selectUsername($event)\"\r\n (avatarSelected)=\"selectAvatar($event)\"\r\n (shared)=\"shareMessage($event)\"\r\n (deleted)=\"deleteMessage($event)\"\r\n ></banta-comment-view>\r\n </div>\r\n</ng-container>",
9258
9288
  styles: [":host{display:flex;flex-direction:column}@-webkit-keyframes select-comment{0%{transform:scale(1.15)}to{transform:scale(1)}}@keyframes select-comment{0%{transform:scale(1.15)}to{transform:scale(1)}}.focused{-webkit-animation-name:select-comment;animation-name:select-comment;-webkit-animation-duration:.4s;animation-duration:.4s;-webkit-animation-fill-mode:both;animation-fill-mode:both}.focused .replies{margin-top:1em;margin-left:4em}banta-comment-view{opacity:1;transition:opacity .4s ease-in-out}banta-comment-view.faded{opacity:.25}.loading{display:block;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;margin:0 auto;min-height:16em}.main.hidden{display:none}@media (max-width:500px){.focused .replies{margin-left:0}}.loading-screen{text-align:center;opacity:0;transition:opacity .25s ease-in-out}.loading-screen.visible{opacity:1}.loading-screen h1{font-weight:100}.loading-screen mat-spinner{margin:5em auto}.loading-screen .loading-message{opacity:0;transition:opacity .25s ease-in-out;width:500px;max-width:100%;margin:0 auto}.loading-screen .loading-message.visible{opacity:1}"]
9259
9289
  },] }
9260
9290
  ];
@@ -9403,8 +9433,8 @@
9403
9433
  var root = document.body.querySelector('[ng-version]') || document.body;
9404
9434
  root.appendChild(this.autocompleteEl.nativeElement);
9405
9435
  };
9406
- CommentFieldComponent.prototype.showPermissionDenied = function () {
9407
- this._permissionDeniedError.next();
9436
+ CommentFieldComponent.prototype.sendPermissionDenied = function (message) {
9437
+ this._permissionDeniedError.next(message);
9408
9438
  };
9409
9439
  CommentFieldComponent.prototype.showAutoComplete = function (options) {
9410
9440
  this.autoCompleteSelected = 0;
@@ -9630,7 +9660,7 @@
9630
9660
  CommentFieldComponent.decorators = [
9631
9661
  { type: core.Component, args: [{
9632
9662
  selector: 'banta-comment-field',
9633
- template: "<form class=\"new-message\" (submit)=\"sendMessage()\">\r\n <div class=\"avatar-container\">\r\n <a href=\"javascript:;\"\r\n class=\"avatar\"\r\n (click)=\"showEditAvatar()\"\r\n [style.background-image]=\"'url(' + user?.avatarUrl + ')'\"\r\n ></a>\r\n </div>\r\n <div class=\"text-container\">\r\n <div class=\"field-container\">\r\n <mat-form-field appearance=\"outline\" floatLabel=\"always\">\r\n <mat-label>{{label}}</mat-label>\r\n <textarea\r\n #textarea\r\n name=\"message\"\r\n [placeholder]=\"placeholder\"\r\n matInput\r\n cdkTextareaAutosize\r\n (keydown)=\"onKeyDown($event)\"\r\n (blur)=\"onBlur()\"\r\n [disabled]=\"sending\"\r\n [(ngModel)]=\"text\"></textarea>\r\n </mat-form-field>\r\n <ng-content></ng-content>\r\n <div #autocompleteContainer class=\"autocomplete-container\">\r\n <div #autocomplete class=\"autocomplete\" [class.visible]=\"autocompleteVisible\">\r\n\r\n <div>\r\n <strong>{{completionPrefix}}</strong>...\r\n </div>\r\n\r\n <a\r\n mat-button\r\n *ngFor=\"let option of autocompleteOptions; index as index\"\r\n (click)=\"activateAutoComplete(option)\"\r\n [class.active]=\"autoCompleteSelected === index\"\r\n >\r\n {{option.label}}\r\n </a>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <mat-spinner *ngIf=\"sending\" class=\"icon loading\" diameter=\"18\" strokeWidth=\"2\"></mat-spinner>\r\n <div *ngIf=\"sendError\" class=\"error-message\" [class.expanded]=\"expandError\">\r\n <mat-icon *ngIf=\"sendError\">error</mat-icon>\r\n {{sendError.message}}\r\n </div>\r\n <emoji-selector-button\r\n class=\"top-right\"\r\n (selected)=\"insertEmoji($event)\"\r\n ></emoji-selector-button>\r\n </div>\r\n <div class=\"actions\">\r\n <ng-container *ngIf=\"!user\">\r\n <button\r\n mat-raised-button\r\n color=\"primary\"\r\n type=\"button\"\r\n (click)=\"showSignIn()\"\r\n >{{signInLabel}}</button>\r\n </ng-container>\r\n <ng-container *ngIf=\"user\">\r\n <button\r\n *ngIf=\"canComment\"\r\n mat-raised-button\r\n class=\"send\"\r\n color=\"primary\"\r\n [disabled]=\"!text || sending\"\r\n >\r\n <mat-icon *ngIf=\"!sending\">chevron_right</mat-icon>\r\n <mat-spinner *ngIf=\"sending\" class=\"icon\" diameter=\"18\" strokeWidth=\"2\"></mat-spinner>\r\n <span class=\"label\">\r\n <ng-container *ngIf=\"!sending\">\r\n {{sendLabel}}\r\n </ng-container>\r\n <ng-container *ngIf=\"sending\">\r\n {{sendingLabel}}\r\n </ng-container>\r\n </span>\r\n\r\n </button>\r\n <button\r\n *ngIf=\"!canComment\"\r\n type=\"button\"\r\n (click)=\"showPermissionDenied()\"\r\n mat-raised-button\r\n color=\"primary\"\r\n >{{permissionDeniedLabel}}</button>\r\n </ng-container>\r\n </div>\r\n</form>\r\n",
9663
+ template: "<form class=\"new-message\" (submit)=\"sendMessage()\">\r\n <div class=\"avatar-container\">\r\n <a href=\"javascript:;\"\r\n class=\"avatar\"\r\n (click)=\"showEditAvatar()\"\r\n [style.background-image]=\"'url(' + user?.avatarUrl + ')'\"\r\n ></a>\r\n </div>\r\n <div class=\"text-container\">\r\n <div class=\"field-container\">\r\n <mat-form-field appearance=\"outline\" floatLabel=\"always\">\r\n <mat-label>{{label}}</mat-label>\r\n <textarea\r\n #textarea\r\n name=\"message\"\r\n [placeholder]=\"placeholder\"\r\n matInput\r\n cdkTextareaAutosize\r\n (keydown)=\"onKeyDown($event)\"\r\n (blur)=\"onBlur()\"\r\n [disabled]=\"sending\"\r\n [(ngModel)]=\"text\"></textarea>\r\n </mat-form-field>\r\n <ng-content></ng-content>\r\n <div #autocompleteContainer class=\"autocomplete-container\">\r\n <div #autocomplete class=\"autocomplete\" [class.visible]=\"autocompleteVisible\">\r\n\r\n <div>\r\n <strong>{{completionPrefix}}</strong>...\r\n </div>\r\n\r\n <a\r\n mat-button\r\n *ngFor=\"let option of autocompleteOptions; index as index\"\r\n (click)=\"activateAutoComplete(option)\"\r\n [class.active]=\"autoCompleteSelected === index\"\r\n >\r\n {{option.label}}\r\n </a>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <mat-spinner *ngIf=\"sending\" class=\"icon loading\" diameter=\"18\" strokeWidth=\"2\"></mat-spinner>\r\n <div *ngIf=\"sendError\" class=\"error-message\" [class.expanded]=\"expandError\">\r\n <mat-icon *ngIf=\"sendError\">error</mat-icon>\r\n {{sendError.message}}\r\n </div>\r\n <emoji-selector-button\r\n class=\"top-right\"\r\n (selected)=\"insertEmoji($event)\"\r\n ></emoji-selector-button>\r\n </div>\r\n <div class=\"actions\">\r\n <ng-container *ngIf=\"!user\">\r\n <button\r\n mat-raised-button\r\n color=\"primary\"\r\n type=\"button\"\r\n (click)=\"showSignIn()\"\r\n >{{signInLabel}}</button>\r\n </ng-container>\r\n <ng-container *ngIf=\"user\">\r\n <button\r\n *ngIf=\"canComment\"\r\n mat-raised-button\r\n class=\"send\"\r\n color=\"primary\"\r\n [disabled]=\"!text || sending\"\r\n >\r\n <mat-icon *ngIf=\"!sending\">chevron_right</mat-icon>\r\n <mat-spinner *ngIf=\"sending\" class=\"icon\" diameter=\"18\" strokeWidth=\"2\"></mat-spinner>\r\n <span class=\"label\">\r\n <ng-container *ngIf=\"!sending\">\r\n {{sendLabel}}\r\n </ng-container>\r\n <ng-container *ngIf=\"sending\">\r\n {{sendingLabel}}\r\n </ng-container>\r\n </span>\r\n\r\n </button>\r\n <button\r\n *ngIf=\"!canComment\"\r\n type=\"button\"\r\n (click)=\"sendPermissionDenied('')\"\r\n mat-raised-button\r\n color=\"primary\"\r\n >{{permissionDeniedLabel}}</button>\r\n </ng-container>\r\n </div>\r\n</form>\r\n",
9634
9664
  styles: ["@-webkit-keyframes comment-field-appear{0%{transform:translateY(128px);opacity:0}to{transform:translate(0);opacity:1}}@keyframes comment-field-appear{0%{transform:translateY(128px);opacity:0}to{transform:translate(0);opacity:1}}:host{margin:0 2em 0 0;display:block;-webkit-animation-name:comment-field-appear;animation-name:comment-field-appear;-webkit-animation-duration:.8s;animation-duration:.8s;-webkit-animation-delay:.4s;animation-delay:.4s;-webkit-animation-fill-mode:both;animation-fill-mode:both}.avatar-container{width:calc(48px + 1.75em);display:flex;justify-content:flex-end}.avatar-container .avatar{width:48px;height:48px;background:pink;border-radius:100%;background-size:cover;background-repeat:no-repeat;background-position:50%;margin-top:.75em;margin-right:.75em}form{display:flex;padding:.5em;align-items:center}form .text-container{position:relative;display:flex;flex-grow:1}form .text-container textarea{font-size:14pt;width:100%}form .text-container textarea[disabled]{opacity:.5}form .text-container mat-form-field{margin-bottom:1em}form .text-container emoji-selector-button{bottom:0;right:0;position:absolute}form .text-container .error-message,form .text-container mat-spinner.loading{position:absolute;left:.5em;bottom:.5em}form .text-container .error-message{color:#683333;overflow-x:hidden;max-width:1.5em;white-space:nowrap;transition:max-width 2s ease-in-out}form .text-container .error-message.expanded,form .text-container .error-message:hover{max-width:100%}form .text-container .error-message mat-icon{vertical-align:middle}form input[type=text]{background:#000;color:#fff;border:1px solid #333;width:100%;height:1em}form .actions{margin-left:1em}form button{display:block;margin:0 0 0 auto}form.new-message{display:flex;align-items:flex-start}form.new-message .field-container{flex-grow:1;display:flex;flex-direction:column}form.new-message mat-form-field{width:100%}form.new-message button{margin:1.25em 0 0}button.send{min-width:9em}textarea{max-height:7em}.autocomplete-container{width:calc(100% - 2em);position:relative;pointer-events:none;top:-2em}.autocomplete{visibility:hidden;pointer-events:none;position:absolute;background:#333;padding:.5em;display:flex;flex-direction:column;z-index:100}.autocomplete.visible{visibility:visible;pointer-events:auto}.autocomplete a{width:100%;text-align:left}.autocomplete a.active{background:#555}@media (max-width:500px){:host{margin:0}.avatar-container{width:auto}.avatar-container .avatar{width:32px;height:32px;margin-top:1.5em}button.send{min-width:auto;margin-top:1.5em}button.send .label{display:none}}"]
9635
9665
  },] }
9636
9666
  ];