solid-ui 2.4.25-f19ac1bc → 2.4.26-029ae1f9

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/dist/main.js CHANGED
@@ -2275,8 +2275,6 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
2275
2275
  * @packageDocumentation
2276
2276
  */
2277
2277
 
2278
- /* global alert confirm */
2279
-
2280
2278
  // pull in first avoid cross-refs
2281
2279
 
2282
2280
  var UI = {
@@ -2369,7 +2367,8 @@ function _findBookmarkDocument() {
2369
2367
  }
2370
2368
  userContext.bookmarkDocument = userContext.instances[0];
2371
2369
  if (userContext.instances.length > 1) {
2372
- alert('More than one bookmark file! ' + userContext.instances);
2370
+ debug.warn('More than one bookmark file! ' + userContext.instances); // @@ todo - deal with > 1
2371
+ // Note should pick up community bookmarks as well
2373
2372
  }
2374
2373
  _context.next = 28;
2375
2374
  break;
@@ -2390,7 +2389,7 @@ function _findBookmarkDocument() {
2390
2389
  case 18:
2391
2390
  _context.prev = 18;
2392
2391
  _context.t0 = _context["catch"](12);
2393
- alert.error("Can't make fresh bookmark file:" + _context.t0);
2392
+ debug.warn("Can't make fresh bookmark file:" + _context.t0);
2394
2393
  return _context.abrupt("return", userContext);
2395
2394
  case 22:
2396
2395
  _context.next = 24;
@@ -2400,7 +2399,7 @@ function _findBookmarkDocument() {
2400
2399
  _context.next = 28;
2401
2400
  break;
2402
2401
  case 27:
2403
- alert('You seem to have no bookmark file and not even a profile file.');
2402
+ debug.warn('You seem to have no bookmark file and not even a profile file.');
2404
2403
  case 28:
2405
2404
  return _context.abrupt("return", userContext);
2406
2405
  case 29:
@@ -2455,7 +2454,7 @@ function _addBookmark() {
2455
2454
  _context2.prev = 14;
2456
2455
  _context2.t0 = _context2["catch"](9);
2457
2456
  msg = 'Making bookmark: ' + _context2.t0;
2458
- alert.error(msg);
2457
+ debug.warn(msg);
2459
2458
  return _context2.abrupt("return", null);
2460
2459
  case 19:
2461
2460
  return _context2.abrupt("return", bookmark);
@@ -2508,7 +2507,7 @@ function _toggleBookmark() {
2508
2507
  _context3.prev = 15;
2509
2508
  _context3.t0 = _context3["catch"](8);
2510
2509
  debug.error('Cant delete bookmark:' + _context3.t0);
2511
- alert('Cant delete bookmark:' + _context3.t0);
2510
+ debug.warn('Cant delete bookmark:' + _context3.t0);
2512
2511
  case 19:
2513
2512
  i++;
2514
2513
  _context3.next = 7;
@@ -2603,6 +2602,7 @@ Object.defineProperty(exports, "__esModule", ({
2603
2602
  }));
2604
2603
  exports.ChatChannel = void 0;
2605
2604
  exports._createIfNotExists = _createIfNotExists;
2605
+ exports.allVersions = allVersions;
2606
2606
  exports.isDeleted = isDeleted;
2607
2607
  exports.isHidden = isHidden;
2608
2608
  exports.isReplaced = isReplaced;
@@ -2678,6 +2678,7 @@ var ChatChannel = /*#__PURE__*/function () {
2678
2678
  var _this = this;
2679
2679
  var oldMsg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
2680
2680
  var deleteIt = arguments.length > 2 ? arguments[2] : undefined;
2681
+ var thread = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;
2681
2682
  return /*#__PURE__*/_regenerator["default"].mark(function _callee2() {
2682
2683
  var sts, now, timestamp, dateStamp, chatDocument, message, me, msg;
2683
2684
  return _regenerator["default"].wrap(function _callee2$(_context2) {
@@ -2690,41 +2691,61 @@ var ChatChannel = /*#__PURE__*/function () {
2690
2691
  chatDocument = oldMsg ? oldMsg.doc() : _this.dateFolder.leafDocumentFromDate(now);
2691
2692
  message = _solidLogic.store.sym(chatDocument.uri + '#' + 'Msg' + timestamp); // const content = store.literal(text)
2692
2693
  me = _solidLogic.authn.currentUser(); // If already logged on
2693
- if (oldMsg) {
2694
- // edit message replaces old one
2695
- sts.push($rdf.st(mostRecentVersion(oldMsg), ns.dct('isReplacedBy'), message, chatDocument));
2696
- if (deleteIt) {
2697
- sts.push($rdf.st(message, ns.schema('dateDeleted'), dateStamp, chatDocument));
2698
- }
2699
- } else {
2700
- // link new message to channel
2701
- sts.push($rdf.st(_this.channel, ns.wf('message'), message, chatDocument));
2694
+ if (!oldMsg) {
2695
+ _context2.next = 21;
2696
+ break;
2702
2697
  }
2698
+ _context2.t0 = sts;
2699
+ _context2.t1 = $rdf;
2700
+ _context2.next = 12;
2701
+ return mostRecentVersion(oldMsg);
2702
+ case 12:
2703
+ _context2.t2 = _context2.sent;
2704
+ _context2.t3 = ns.dct('isReplacedBy');
2705
+ _context2.t4 = message;
2706
+ _context2.t5 = chatDocument;
2707
+ _context2.t6 = _context2.t1.st.call(_context2.t1, _context2.t2, _context2.t3, _context2.t4, _context2.t5);
2708
+ _context2.t0.push.call(_context2.t0, _context2.t6);
2709
+ if (deleteIt) {
2710
+ sts.push($rdf.st(message, ns.schema('dateDeleted'), dateStamp, chatDocument));
2711
+ }
2712
+ _context2.next = 22;
2713
+ break;
2714
+ case 21:
2715
+ // link new message to channel
2716
+ sts.push($rdf.st(_this.channel, ns.wf('message'), message, chatDocument));
2717
+ case 22:
2703
2718
  sts.push($rdf.st(message, ns.sioc('content'), _solidLogic.store.literal(text), chatDocument));
2704
2719
  sts.push($rdf.st(message, ns.dct('created'), dateStamp, chatDocument));
2705
2720
  if (me) {
2706
2721
  sts.push($rdf.st(message, ns.foaf('maker'), me, chatDocument));
2707
2722
  }
2708
- _context2.prev = 11;
2709
- _context2.next = 14;
2710
- return _solidLogic.store.updater.update([], sts);
2711
- case 14:
2712
- _context2.next = 22;
2723
+ if (thread) {
2724
+ sts.push($rdf.st(thread, ns.sioc('has_member'), message, chatDocument));
2725
+ if (!thread.doc().sameTerm(message.doc())) {
2726
+ sts.push($rdf.st(thread, ns.sioc('has_member'), message, thread.doc()));
2727
+ }
2728
+ }
2729
+ _context2.prev = 26;
2730
+ _context2.next = 29;
2731
+ return _solidLogic.store.updater.updateMany([], sts);
2732
+ case 29:
2733
+ _context2.next = 37;
2713
2734
  break;
2714
- case 16:
2715
- _context2.prev = 16;
2716
- _context2.t0 = _context2["catch"](11);
2717
- msg = 'Error saving chat message: ' + _context2.t0;
2735
+ case 31:
2736
+ _context2.prev = 31;
2737
+ _context2.t7 = _context2["catch"](26);
2738
+ msg = 'Error saving chat message: ' + _context2.t7;
2718
2739
  debug.warn(msg);
2719
2740
  alert(msg);
2720
2741
  throw new Error(msg);
2721
- case 22:
2742
+ case 37:
2722
2743
  return _context2.abrupt("return", message);
2723
- case 23:
2744
+ case 38:
2724
2745
  case "end":
2725
2746
  return _context2.stop();
2726
2747
  }
2727
- }, _callee2, null, [[11, 16]]);
2748
+ }, _callee2, null, [[26, 31]]);
2728
2749
  })();
2729
2750
  });
2730
2751
  function updateMessage(_x2) {
@@ -2754,26 +2775,164 @@ var ChatChannel = /*#__PURE__*/function () {
2754
2775
  return _deleteMessage.apply(this, arguments);
2755
2776
  }
2756
2777
  return deleteMessage;
2778
+ }() // Create a new thread of replies to the thread root message
2779
+ // or returns one which already exists
2780
+ }, {
2781
+ key: "createThread",
2782
+ value: function () {
2783
+ var _createThread = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4(threadRoot) {
2784
+ var already, thread, insert;
2785
+ return _regenerator["default"].wrap(function _callee4$(_context4) {
2786
+ while (1) switch (_context4.prev = _context4.next) {
2787
+ case 0:
2788
+ already = _solidLogic.store.each(threadRoot, ns.sioc('has_reply'), null, threadRoot.doc()).filter(function (thread) {
2789
+ return _solidLogic.store.holds(thread, ns.rdf('type'), ns.sioc('Thread'), thread.doc());
2790
+ });
2791
+ if (!(already.length > 0)) {
2792
+ _context4.next = 3;
2793
+ break;
2794
+ }
2795
+ return _context4.abrupt("return", already[0]);
2796
+ case 3:
2797
+ thread = $rdf.sym(threadRoot.uri + '-thread');
2798
+ insert = [$rdf.st(thread, ns.rdf('type'), ns.sioc('Thread'), thread.doc()), $rdf.st(threadRoot, ns.sioc('has_reply'), thread, thread.doc())];
2799
+ _context4.next = 7;
2800
+ return _solidLogic.store.updater.update([], insert);
2801
+ case 7:
2802
+ return _context4.abrupt("return", thread);
2803
+ case 8:
2804
+ case "end":
2805
+ return _context4.stop();
2806
+ }
2807
+ }, _callee4);
2808
+ }));
2809
+ function createThread(_x4) {
2810
+ return _createThread.apply(this, arguments);
2811
+ }
2812
+ return createThread;
2757
2813
  }()
2758
2814
  }]);
2759
2815
  return ChatChannel;
2760
2816
  }(); // class ChatChannel
2817
+ // ////////// Utility functions
2761
2818
  exports.ChatChannel = ChatChannel;
2762
- function originalVersion(message) {
2763
- var msg = message;
2764
- while (msg) {
2765
- message = msg;
2766
- msg = _solidLogic.store.any(null, ns.dct('isReplacedBy'), message, message.doc());
2767
- }
2768
- return message;
2819
+ function allVersions(_x5) {
2820
+ return _allVersions.apply(this, arguments);
2769
2821
  }
2770
- function mostRecentVersion(message) {
2771
- var msg = message;
2772
- while (msg) {
2773
- message = msg;
2774
- msg = _solidLogic.store.any(message, ns.dct('isReplacedBy'), null, message.doc());
2775
- }
2776
- return message;
2822
+ function _allVersions() {
2823
+ _allVersions = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee5(message) {
2824
+ var versions, m, prev, next;
2825
+ return _regenerator["default"].wrap(function _callee5$(_context5) {
2826
+ while (1) switch (_context5.prev = _context5.next) {
2827
+ case 0:
2828
+ versions = [message];
2829
+ m = message;
2830
+ case 2:
2831
+ if (false) {}
2832
+ // earlier?
2833
+ prev = _solidLogic.store.any(null, ns.dct('isReplacedBy'), m, m.doc());
2834
+ if (prev) {
2835
+ _context5.next = 6;
2836
+ break;
2837
+ }
2838
+ return _context5.abrupt("break", 12);
2839
+ case 6:
2840
+ _context5.next = 8;
2841
+ return _solidLogic.store.fetcher.load(prev);
2842
+ case 8:
2843
+ versions.unshift(prev);
2844
+ m = prev;
2845
+ _context5.next = 2;
2846
+ break;
2847
+ case 12:
2848
+ m = message;
2849
+ case 13:
2850
+ if (false) {}
2851
+ // later?
2852
+ next = _solidLogic.store.any(m, ns.dct('isReplacedBy'), null, m.doc());
2853
+ if (next) {
2854
+ _context5.next = 17;
2855
+ break;
2856
+ }
2857
+ return _context5.abrupt("break", 21);
2858
+ case 17:
2859
+ versions.push(next);
2860
+ m = next;
2861
+ _context5.next = 13;
2862
+ break;
2863
+ case 21:
2864
+ return _context5.abrupt("return", versions);
2865
+ case 22:
2866
+ case "end":
2867
+ return _context5.stop();
2868
+ }
2869
+ }, _callee5);
2870
+ }));
2871
+ return _allVersions.apply(this, arguments);
2872
+ }
2873
+ function originalVersion(_x6) {
2874
+ return _originalVersion.apply(this, arguments);
2875
+ }
2876
+ function _originalVersion() {
2877
+ _originalVersion = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee6(message) {
2878
+ var msg;
2879
+ return _regenerator["default"].wrap(function _callee6$(_context6) {
2880
+ while (1) switch (_context6.prev = _context6.next) {
2881
+ case 0:
2882
+ msg = message;
2883
+ case 1:
2884
+ if (!msg) {
2885
+ _context6.next = 8;
2886
+ break;
2887
+ }
2888
+ message = msg;
2889
+ _context6.next = 5;
2890
+ return _solidLogic.store.fetcher.load(message);
2891
+ case 5:
2892
+ msg = _solidLogic.store.any(null, ns.dct('isReplacedBy'), message, message.doc()); // @@@ may need to load doc
2893
+ _context6.next = 1;
2894
+ break;
2895
+ case 8:
2896
+ return _context6.abrupt("return", message);
2897
+ case 9:
2898
+ case "end":
2899
+ return _context6.stop();
2900
+ }
2901
+ }, _callee6);
2902
+ }));
2903
+ return _originalVersion.apply(this, arguments);
2904
+ }
2905
+ function mostRecentVersion(_x7) {
2906
+ return _mostRecentVersion.apply(this, arguments);
2907
+ }
2908
+ function _mostRecentVersion() {
2909
+ _mostRecentVersion = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee7(message) {
2910
+ var msg;
2911
+ return _regenerator["default"].wrap(function _callee7$(_context7) {
2912
+ while (1) switch (_context7.prev = _context7.next) {
2913
+ case 0:
2914
+ msg = message;
2915
+ case 1:
2916
+ if (!msg) {
2917
+ _context7.next = 8;
2918
+ break;
2919
+ }
2920
+ message = msg;
2921
+ _context7.next = 5;
2922
+ return _solidLogic.store.fetcher.load(message);
2923
+ case 5:
2924
+ msg = _solidLogic.store.any(message, ns.dct('isReplacedBy'), null, message.doc());
2925
+ _context7.next = 1;
2926
+ break;
2927
+ case 8:
2928
+ return _context7.abrupt("return", message);
2929
+ case 9:
2930
+ case "end":
2931
+ return _context7.stop();
2932
+ }
2933
+ }, _callee7);
2934
+ }));
2935
+ return _mostRecentVersion.apply(this, arguments);
2777
2936
  }
2778
2937
  function isDeleted(message) {
2779
2938
  return _solidLogic.store.holds(message, ns.schema('dateDeleted'), null, message.doc());
@@ -2792,62 +2951,62 @@ function nick(person) {
2792
2951
  if (s) return '' + s.value;
2793
2952
  return '' + utils.label(person);
2794
2953
  }
2795
- function _createIfNotExists(_x4) {
2954
+ function _createIfNotExists(_x8) {
2796
2955
  return _createIfNotExists2.apply(this, arguments);
2797
2956
  } // ends
2798
2957
  function _createIfNotExists2() {
2799
2958
  _createIfNotExists2 = (0, _asyncToGenerator2["default"])(function (doc) {
2800
2959
  var contentType = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'text/turtle';
2801
2960
  var data = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';
2802
- return /*#__PURE__*/_regenerator["default"].mark(function _callee4() {
2961
+ return /*#__PURE__*/_regenerator["default"].mark(function _callee8() {
2803
2962
  var response;
2804
- return _regenerator["default"].wrap(function _callee4$(_context4) {
2805
- while (1) switch (_context4.prev = _context4.next) {
2963
+ return _regenerator["default"].wrap(function _callee8$(_context8) {
2964
+ while (1) switch (_context8.prev = _context8.next) {
2806
2965
  case 0:
2807
- _context4.prev = 0;
2808
- _context4.next = 3;
2966
+ _context8.prev = 0;
2967
+ _context8.next = 3;
2809
2968
  return _solidLogic.store.fetcher.load(doc);
2810
2969
  case 3:
2811
- response = _context4.sent;
2812
- _context4.next = 26;
2970
+ response = _context8.sent;
2971
+ _context8.next = 26;
2813
2972
  break;
2814
2973
  case 6:
2815
- _context4.prev = 6;
2816
- _context4.t0 = _context4["catch"](0);
2817
- if (!(_context4.t0.response.status === 404)) {
2818
- _context4.next = 24;
2974
+ _context8.prev = 6;
2975
+ _context8.t0 = _context8["catch"](0);
2976
+ if (!(_context8.t0.response.status === 404)) {
2977
+ _context8.next = 24;
2819
2978
  break;
2820
2979
  }
2821
2980
  debug.log('createIfNotExists: doc does NOT exist, will create... ' + doc);
2822
- _context4.prev = 10;
2823
- _context4.next = 13;
2981
+ _context8.prev = 10;
2982
+ _context8.next = 13;
2824
2983
  return _solidLogic.store.fetcher.webOperation('PUT', doc.uri, {
2825
2984
  data: data,
2826
2985
  contentType: contentType
2827
2986
  });
2828
2987
  case 13:
2829
- response = _context4.sent;
2830
- _context4.next = 20;
2988
+ response = _context8.sent;
2989
+ _context8.next = 20;
2831
2990
  break;
2832
2991
  case 16:
2833
- _context4.prev = 16;
2834
- _context4.t1 = _context4["catch"](10);
2835
- debug.log('createIfNotExists doc FAILED: ' + doc + ': ' + _context4.t1);
2836
- throw _context4.t1;
2992
+ _context8.prev = 16;
2993
+ _context8.t1 = _context8["catch"](10);
2994
+ debug.log('createIfNotExists doc FAILED: ' + doc + ': ' + _context8.t1);
2995
+ throw _context8.t1;
2837
2996
  case 20:
2838
2997
  delete _solidLogic.store.fetcher.requested[doc.uri]; // delete cached 404 error
2839
2998
  // debug.log('createIfNotExists doc created ok ' + doc)
2840
- return _context4.abrupt("return", response);
2999
+ return _context8.abrupt("return", response);
2841
3000
  case 24:
2842
- debug.log('createIfNotExists doc load error NOT 404: ' + doc + ': ' + _context4.t0);
2843
- throw _context4.t0;
3001
+ debug.log('createIfNotExists doc load error NOT 404: ' + doc + ': ' + _context8.t0);
3002
+ throw _context8.t0;
2844
3003
  case 26:
2845
- return _context4.abrupt("return", response);
3004
+ return _context8.abrupt("return", response);
2846
3005
  case 27:
2847
3006
  case "end":
2848
- return _context4.stop();
3007
+ return _context8.stop();
2849
3008
  }
2850
- }, _callee4, null, [[0, 6], [10, 16]]);
3009
+ }, _callee8, null, [[0, 6], [10, 16]]);
2851
3010
  })();
2852
3011
  });
2853
3012
  return _createIfNotExists2.apply(this, arguments);
@@ -3225,19 +3384,9 @@ var _chatLogic = __webpack_require__(/*! ./chatLogic */ "./lib/chat/chatLogic.js
3225
3384
  var _message = __webpack_require__(/*! ./message */ "./lib/chat/message.js");
3226
3385
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
3227
3386
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
3228
- /**
3229
- * Contains the [[infiniteMessageArea]] class
3230
- * @packageDocumentation
3231
- */
3232
- // import { findBookmarkDocument } from './bookmarks'
3233
- // pull in first avoid cross-refs
3234
-
3235
- // import * as style from '../style'
3236
- // import * as utils from '../utils'
3237
-
3238
- // import * as pad from '../pad'
3239
- // import { DateFolder } from './dateFolder'
3240
-
3387
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
3388
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
3389
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
3241
3390
  // const UI = { authn, icons, ns, media, pad, $rdf, store, style, utils, widgets }
3242
3391
 
3243
3392
  function desktopNotification(str) {
@@ -3265,34 +3414,9 @@ function desktopNotification(str) {
3265
3414
  /**
3266
3415
  * Renders a chat message inside a `messageTable`
3267
3416
  */
3268
- function insertMessageIntoTable(channelObject, messageTable, message, fresh, options, userContext) {
3269
- var messageRow = (0, _message.renderMessageRow)(channelObject, message, fresh, options, userContext);
3270
-
3271
- // const message = messageRow.AJAR_subject
3272
- if (options.selectedMessage && options.selectedMessage.sameTerm(message)) {
3273
- messageRow.style.backgroundColor = 'yellow';
3274
- options.selectedElement = messageRow;
3275
- messageTable.selectedElement = messageRow;
3276
- }
3277
- var done = false;
3278
- for (var ele = messageTable.firstChild;; ele = ele.nextSibling) {
3279
- if (!ele) {
3280
- // empty
3281
- break;
3282
- }
3283
- var newestFirst = options.newestfirst === true;
3284
- var dateString = messageRow.AJAR_date;
3285
- if (dateString > ele.AJAR_date && newestFirst || dateString < ele.AJAR_date && !newestFirst) {
3286
- messageTable.insertBefore(messageRow, ele);
3287
- done = true;
3288
- break;
3289
- }
3290
- }
3291
- if (!done) {
3292
- messageTable.appendChild(messageRow);
3293
- }
3417
+ function insertMessageIntoTable(_x, _x2, _x3, _x4, _x5, _x6) {
3418
+ return _insertMessageIntoTable.apply(this, arguments);
3294
3419
  }
3295
-
3296
3420
  /**
3297
3421
  * Common code for a chat (discussion area of messages about something)
3298
3422
  * This version runs over a series of files for different time periods
@@ -3315,20 +3439,70 @@ function insertMessageIntoTable(channelObject, messageTable, message, fresh, opt
3315
3439
  - inlineImageHeightEms: The height (in ems) of images expaned from their URIs in the chat.
3316
3440
 
3317
3441
  */
3318
- function infiniteMessageArea(_x, _x2, _x3, _x4) {
3442
+ function _insertMessageIntoTable() {
3443
+ _insertMessageIntoTable = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(channelObject, messageTable, message, fresh, options, userContext) {
3444
+ var messageRow, done, ele, newestFirst, dateString;
3445
+ return _regenerator["default"].wrap(function _callee$(_context) {
3446
+ while (1) switch (_context.prev = _context.next) {
3447
+ case 0:
3448
+ _context.next = 2;
3449
+ return (0, _message.renderMessageRow)(channelObject, message, fresh, options, userContext);
3450
+ case 2:
3451
+ messageRow = _context.sent;
3452
+ // const message = messageRow.AJAR_subject
3453
+ if (options.selectedMessage && options.selectedMessage.sameTerm(message)) {
3454
+ messageRow.style.backgroundColor = 'yellow';
3455
+ options.selectedElement = messageRow;
3456
+ messageTable.selectedElement = messageRow;
3457
+ }
3458
+ done = false;
3459
+ ele = messageTable.firstChild;
3460
+ case 6:
3461
+ if (ele) {
3462
+ _context.next = 8;
3463
+ break;
3464
+ }
3465
+ return _context.abrupt("break", 17);
3466
+ case 8:
3467
+ newestFirst = options.newestfirst === true;
3468
+ dateString = messageRow.AJAR_date;
3469
+ if (!(dateString > ele.AJAR_date && newestFirst || dateString < ele.AJAR_date && !newestFirst)) {
3470
+ _context.next = 14;
3471
+ break;
3472
+ }
3473
+ messageTable.insertBefore(messageRow, ele);
3474
+ done = true;
3475
+ return _context.abrupt("break", 17);
3476
+ case 14:
3477
+ ele = ele.nextSibling;
3478
+ _context.next = 6;
3479
+ break;
3480
+ case 17:
3481
+ if (!done) {
3482
+ messageTable.appendChild(messageRow);
3483
+ }
3484
+ case 18:
3485
+ case "end":
3486
+ return _context.stop();
3487
+ }
3488
+ }, _callee);
3489
+ }));
3490
+ return _insertMessageIntoTable.apply(this, arguments);
3491
+ }
3492
+ function infiniteMessageArea(_x7, _x8, _x9, _x10) {
3319
3493
  return _infiniteMessageArea.apply(this, arguments);
3320
3494
  }
3321
3495
  function _infiniteMessageArea() {
3322
- _infiniteMessageArea = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee12(dom, wasStore, chatChannel, options) {
3323
- var syncMessages, addMessage, insertPreviousMessages, _insertPreviousMessages, removePreviousMessages, createMessageTable, _createMessageTable, renderMessageTable, addNewChatDocumentIfNewDay, _addNewChatDocumentIfNewDay, appendCurrentMessages, _appendCurrentMessages, loadMoreWhereNeeded, _loadMoreWhereNeeded, loadInitialContent, _loadInitialContent, newestFirst, channelObject, dateFolder, div, statusArea, userContext, liveMessageTable, earliest, latest, lock;
3324
- return _regenerator["default"].wrap(function _callee12$(_context12) {
3325
- while (1) switch (_context12.prev = _context12.next) {
3496
+ _infiniteMessageArea = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee16(dom, wasStore, chatChannel, options) {
3497
+ var syncMessages, _syncMessages, addMessage, _addMessage, insertPreviousMessages, _insertPreviousMessages, removePreviousMessages, createMessageTable, _createMessageTable, renderMessageTable, _renderMessageTable, addNewChatDocumentIfNewDay, _addNewChatDocumentIfNewDay, appendCurrentMessages, _appendCurrentMessages, loadMoreWhereNeeded, _loadMoreWhereNeeded, loadInitialContent, _loadInitialContent, newestFirst, channelObject, dateFolder, div, statusArea, userContext, liveMessageTable, earliest, latest, lock;
3498
+ return _regenerator["default"].wrap(function _callee16$(_context16) {
3499
+ while (1) switch (_context16.prev = _context16.next) {
3326
3500
  case 0:
3327
3501
  _loadInitialContent = function _loadInitialContent3() {
3328
- _loadInitialContent = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee11() {
3502
+ _loadInitialContent = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee15() {
3329
3503
  var yank, fixScroll, live, selectedDocument, now, todayDocument, selectedMessageTable, selectedDate;
3330
- return _regenerator["default"].wrap(function _callee11$(_context11) {
3331
- while (1) switch (_context11.prev = _context11.next) {
3504
+ return _regenerator["default"].wrap(function _callee15$(_context15) {
3505
+ while (1) switch (_context15.prev = _context15.next) {
3332
3506
  case 0:
3333
3507
  fixScroll = function _fixScroll() {
3334
3508
  if (options.selectedElement) {
@@ -3353,29 +3527,29 @@ function _infiniteMessageArea() {
3353
3527
  live = todayDocument.sameTerm(selectedDocument);
3354
3528
  }
3355
3529
  if (!(options.selectedMessage && !live)) {
3356
- _context11.next = 15;
3530
+ _context15.next = 15;
3357
3531
  break;
3358
3532
  }
3359
3533
  selectedDate = dateFolder.dateFromLeafDocument(selectedDocument);
3360
- _context11.next = 7;
3534
+ _context15.next = 7;
3361
3535
  return createMessageTable(selectedDate, live);
3362
3536
  case 7:
3363
- selectedMessageTable = _context11.sent;
3537
+ selectedMessageTable = _context15.sent;
3364
3538
  div.appendChild(selectedMessageTable);
3365
3539
  earliest.messageTable = selectedMessageTable;
3366
3540
  latest.messageTable = selectedMessageTable;
3367
3541
  yank();
3368
3542
  setTimeout(yank, 1000); // @@ kludge - restore position distubed by other cHANGES
3369
- _context11.next = 19;
3543
+ _context15.next = 19;
3370
3544
  break;
3371
3545
  case 15:
3372
- _context11.next = 17;
3546
+ _context15.next = 17;
3373
3547
  return appendCurrentMessages();
3374
3548
  case 17:
3375
3549
  earliest.messageTable = liveMessageTable;
3376
3550
  latest.messageTable = liveMessageTable;
3377
3551
  case 19:
3378
- _context11.next = 21;
3552
+ _context15.next = 21;
3379
3553
  return loadMoreWhereNeeded(null, fixScroll);
3380
3554
  case 21:
3381
3555
  div.addEventListener('scroll', loadMoreWhereNeeded);
@@ -3384,9 +3558,9 @@ function _infiniteMessageArea() {
3384
3558
  }
3385
3559
  case 23:
3386
3560
  case "end":
3387
- return _context11.stop();
3561
+ return _context15.stop();
3388
3562
  }
3389
- }, _callee11);
3563
+ }, _callee15);
3390
3564
  }));
3391
3565
  return _loadInitialContent.apply(this, arguments);
3392
3566
  };
@@ -3394,16 +3568,16 @@ function _infiniteMessageArea() {
3394
3568
  return _loadInitialContent.apply(this, arguments);
3395
3569
  };
3396
3570
  _loadMoreWhereNeeded = function _loadMoreWhereNeeded3() {
3397
- _loadMoreWhereNeeded = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee10(event, fixScroll) {
3571
+ _loadMoreWhereNeeded = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee14(event, fixScroll) {
3398
3572
  var freeze, magicZone, done, scrollBottom, scrollTop;
3399
- return _regenerator["default"].wrap(function _callee10$(_context10) {
3400
- while (1) switch (_context10.prev = _context10.next) {
3573
+ return _regenerator["default"].wrap(function _callee14$(_context14) {
3574
+ while (1) switch (_context14.prev = _context14.next) {
3401
3575
  case 0:
3402
3576
  if (!lock) {
3403
- _context10.next = 2;
3577
+ _context14.next = 2;
3404
3578
  break;
3405
3579
  }
3406
- return _context10.abrupt("return");
3580
+ return _context14.abrupt("return");
3407
3581
  case 2:
3408
3582
  lock = true;
3409
3583
  freeze = !fixScroll;
@@ -3411,36 +3585,36 @@ function _infiniteMessageArea() {
3411
3585
  // const bottom = div.scrollHeight - top - div.clientHeight
3412
3586
  case 5:
3413
3587
  if (!(div.scrollTop < magicZone && earliest.messageTable && !earliest.messageTable.initial && earliest.messageTable.extendBackwards)) {
3414
- _context10.next = 21;
3588
+ _context14.next = 21;
3415
3589
  break;
3416
3590
  }
3417
3591
  if (!(div.scrollHeight === 0)) {
3418
- _context10.next = 10;
3592
+ _context14.next = 10;
3419
3593
  break;
3420
3594
  }
3421
- // console.log(' chat/loadMoreWhereNeeded: trying later...')
3595
+ // debug.log(' chat/loadMoreWhereNeeded: trying later...')
3422
3596
  setTimeout(loadMoreWhereNeeded, 2000); // couple be less
3423
3597
  lock = false;
3424
- return _context10.abrupt("return");
3598
+ return _context14.abrupt("return");
3425
3599
  case 10:
3426
- // console.log(' chat/loadMoreWhereNeeded: Going now')
3600
+ // debug.log(' chat/loadMoreWhereNeeded: Going now')
3427
3601
  scrollBottom = div.scrollHeight - div.scrollTop;
3428
3602
  debug.log('infinite scroll: adding above: top ' + div.scrollTop);
3429
- _context10.next = 14;
3603
+ _context14.next = 14;
3430
3604
  return earliest.messageTable.extendBackwards();
3431
3605
  case 14:
3432
- done = _context10.sent;
3606
+ done = _context14.sent;
3433
3607
  if (freeze) {
3434
3608
  div.scrollTop = div.scrollHeight - scrollBottom;
3435
3609
  }
3436
3610
  if (fixScroll) fixScroll();
3437
3611
  if (!done) {
3438
- _context10.next = 19;
3612
+ _context14.next = 19;
3439
3613
  break;
3440
3614
  }
3441
- return _context10.abrupt("break", 21);
3615
+ return _context14.abrupt("break", 21);
3442
3616
  case 19:
3443
- _context10.next = 5;
3617
+ _context14.next = 5;
3444
3618
  break;
3445
3619
  case 21:
3446
3620
  if (!(options.selectedMessage &&
@@ -3450,15 +3624,15 @@ function _infiniteMessageArea() {
3450
3624
  latest.messageTable && !latest.messageTable["final"] &&
3451
3625
  // there is more data to come
3452
3626
  latest.messageTable.extendForwards)) {
3453
- _context10.next = 33;
3627
+ _context14.next = 33;
3454
3628
  break;
3455
3629
  }
3456
3630
  scrollTop = div.scrollTop;
3457
3631
  debug.log('infinite scroll: adding below: bottom: ' + (div.scrollHeight - div.scrollTop - div.clientHeight));
3458
- _context10.next = 26;
3632
+ _context14.next = 26;
3459
3633
  return latest.messageTable.extendForwards();
3460
3634
  case 26:
3461
- done = _context10.sent;
3635
+ done = _context14.sent;
3462
3636
  // then add more data on the bottom
3463
3637
  if (freeze) {
3464
3638
  div.scrollTop = scrollTop; // while adding below keep same things in view
@@ -3466,63 +3640,66 @@ function _infiniteMessageArea() {
3466
3640
 
3467
3641
  if (fixScroll) fixScroll();
3468
3642
  if (!done) {
3469
- _context10.next = 31;
3643
+ _context14.next = 31;
3470
3644
  break;
3471
3645
  }
3472
- return _context10.abrupt("break", 33);
3646
+ return _context14.abrupt("break", 33);
3473
3647
  case 31:
3474
- _context10.next = 21;
3648
+ _context14.next = 21;
3475
3649
  break;
3476
3650
  case 33:
3477
3651
  lock = false;
3478
3652
  case 34:
3479
3653
  case "end":
3480
- return _context10.stop();
3654
+ return _context14.stop();
3481
3655
  }
3482
- }, _callee10);
3656
+ }, _callee14);
3483
3657
  }));
3484
3658
  return _loadMoreWhereNeeded.apply(this, arguments);
3485
3659
  };
3486
- loadMoreWhereNeeded = function _loadMoreWhereNeeded2(_x10, _x11) {
3660
+ loadMoreWhereNeeded = function _loadMoreWhereNeeded2(_x20, _x21) {
3487
3661
  return _loadMoreWhereNeeded.apply(this, arguments);
3488
3662
  };
3489
3663
  _appendCurrentMessages = function _appendCurrentMessage2() {
3490
- _appendCurrentMessages = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee9() {
3664
+ _appendCurrentMessages = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee13() {
3491
3665
  var now, chatDocument, messageTable;
3492
- return _regenerator["default"].wrap(function _callee9$(_context9) {
3493
- while (1) switch (_context9.prev = _context9.next) {
3666
+ return _regenerator["default"].wrap(function _callee13$(_context13) {
3667
+ while (1) switch (_context13.prev = _context13.next) {
3494
3668
  case 0:
3495
3669
  now = new Date();
3496
3670
  chatDocument = dateFolder.leafDocumentFromDate(now); /// ///////////////////////////////////////////////////////////
3497
- _context9.next = 4;
3671
+ _context13.next = 4;
3498
3672
  return createMessageTable(now, true);
3499
3673
  case 4:
3500
- messageTable = _context9.sent;
3674
+ messageTable = _context13.sent;
3501
3675
  div.appendChild(messageTable);
3502
- div.refresh = /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee8() {
3503
- return _regenerator["default"].wrap(function _callee8$(_context8) {
3504
- while (1) switch (_context8.prev = _context8.next) {
3676
+ div.refresh = /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee12() {
3677
+ return _regenerator["default"].wrap(function _callee12$(_context12) {
3678
+ while (1) switch (_context12.prev = _context12.next) {
3505
3679
  case 0:
3506
- _context8.next = 2;
3680
+ _context12.next = 2;
3507
3681
  return addNewChatDocumentIfNewDay(new Date());
3508
3682
  case 2:
3509
- syncMessages(chatChannel, messageTable); // @@ livemessagetable??
3510
- desktopNotification(chatChannel);
3683
+ _context12.next = 4;
3684
+ return syncMessages(chatChannel, messageTable);
3511
3685
  case 4:
3686
+ // @@ livemessagetable??
3687
+ desktopNotification(chatChannel);
3688
+ case 5:
3512
3689
  case "end":
3513
- return _context8.stop();
3690
+ return _context12.stop();
3514
3691
  }
3515
- }, _callee8);
3692
+ }, _callee12);
3516
3693
  })); // The short chat version the live update listening is done in the pane but we do it in the widget @@
3517
3694
  _solidLogic.store.updater.addDownstreamChangeListener(chatDocument, div.refresh); // Live update
3518
3695
  liveMessageTable = messageTable;
3519
3696
  latest.messageTable = liveMessageTable;
3520
- return _context9.abrupt("return", messageTable);
3697
+ return _context13.abrupt("return", messageTable);
3521
3698
  case 11:
3522
3699
  case "end":
3523
- return _context9.stop();
3700
+ return _context13.stop();
3524
3701
  }
3525
- }, _callee9);
3702
+ }, _callee13);
3526
3703
  }));
3527
3704
  return _appendCurrentMessages.apply(this, arguments);
3528
3705
  };
@@ -3530,15 +3707,15 @@ function _infiniteMessageArea() {
3530
3707
  return _appendCurrentMessages.apply(this, arguments);
3531
3708
  };
3532
3709
  _addNewChatDocumentIfNewDay = function _addNewChatDocumentIf2() {
3533
- _addNewChatDocumentIfNewDay = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee7() {
3710
+ _addNewChatDocumentIfNewDay = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee11() {
3534
3711
  var newChatDocument, oldChatDocument, sts;
3535
- return _regenerator["default"].wrap(function _callee7$(_context7) {
3536
- while (1) switch (_context7.prev = _context7.next) {
3712
+ return _regenerator["default"].wrap(function _callee11$(_context11) {
3713
+ while (1) switch (_context11.prev = _context11.next) {
3537
3714
  case 0:
3538
3715
  // @@ Remove listener from previous table as it is now static
3539
3716
  newChatDocument = dateFolder.leafDocumentFromDate(new Date());
3540
3717
  if (newChatDocument.sameTerm(latest.messageTable.chatDocument)) {
3541
- _context7.next = 7;
3718
+ _context11.next = 7;
3542
3719
  break;
3543
3720
  }
3544
3721
  // It is a new day
@@ -3547,7 +3724,7 @@ function _infiniteMessageArea() {
3547
3724
  delete liveMessageTable.inputRow;
3548
3725
  }
3549
3726
  oldChatDocument = latest.messageTable.chatDocument;
3550
- _context7.next = 6;
3727
+ _context11.next = 6;
3551
3728
  return appendCurrentMessages();
3552
3729
  case 6:
3553
3730
  // Adding a link in the document will ping listeners to add the new block too
@@ -3561,286 +3738,350 @@ function _infiniteMessageArea() {
3561
3738
  }
3562
3739
  case 7:
3563
3740
  case "end":
3564
- return _context7.stop();
3741
+ return _context11.stop();
3565
3742
  }
3566
- }, _callee7);
3743
+ }, _callee11);
3567
3744
  }));
3568
3745
  return _addNewChatDocumentIfNewDay.apply(this, arguments);
3569
3746
  };
3570
3747
  addNewChatDocumentIfNewDay = function _addNewChatDocumentIf() {
3571
3748
  return _addNewChatDocumentIfNewDay.apply(this, arguments);
3572
3749
  };
3573
- renderMessageTable = function _renderMessageTable(date, live) {
3574
- var scrollBackbutton;
3575
- var scrollForwardButton;
3576
-
3577
- /// ///////////////// Scroll down adding more above
3578
- function extendBackwards() {
3579
- return _extendBackwards.apply(this, arguments);
3580
- }
3581
- function _extendBackwards() {
3582
- _extendBackwards = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() {
3583
- var done;
3584
- return _regenerator["default"].wrap(function _callee$(_context) {
3585
- while (1) switch (_context.prev = _context.next) {
3586
- case 0:
3587
- _context.next = 2;
3588
- return insertPreviousMessages(true);
3589
- case 2:
3590
- done = _context.sent;
3591
- if (done) {
3592
- if (scrollBackbutton) {
3593
- scrollBackbutton.firstChild.setAttribute('src', _iconBase.icons.iconBase + 'noun_T-Block_1114655_000000.svg'); // T
3594
- scrollBackbutton.disabled = true;
3595
- }
3596
- messageTable.initial = true;
3597
- } else {
3598
- messageTable.extendedBack = true;
3750
+ _renderMessageTable = function _renderMessageTable3() {
3751
+ _renderMessageTable = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee10(date, live) {
3752
+ var scrollBackbutton, scrollForwardButton, extendBackwards, _extendBackwards, setScrollBackbuttonIcon, scrollBackbuttonHandler, _scrollBackbuttonHandler, extendForwards, _extendForwards, setScrollForwardButtonIcon, scrollForwardButtonHandler, _scrollForwardButtonHandler, messageTable, chatDocument, tr, test, titleTR, scrollBackbuttonCell, dateCell, scrollForwardButtonCell, sts, _iterator2, _step2, st;
3753
+ return _regenerator["default"].wrap(function _callee10$(_context10) {
3754
+ while (1) switch (_context10.prev = _context10.next) {
3755
+ case 0:
3756
+ _scrollForwardButtonHandler = function _scrollForwardButtonH2() {
3757
+ _scrollForwardButtonHandler = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee9(_event) {
3758
+ return _regenerator["default"].wrap(function _callee9$(_context9) {
3759
+ while (1) switch (_context9.prev = _context9.next) {
3760
+ case 0:
3761
+ if (!messageTable.extendedForwards) {
3762
+ _context9.next = 6;
3763
+ break;
3764
+ }
3765
+ removePreviousMessages(false, messageTable);
3766
+ messageTable.extendedForwards = false;
3767
+ setScrollForwardButtonIcon();
3768
+ _context9.next = 9;
3769
+ break;
3770
+ case 6:
3771
+ _context9.next = 8;
3772
+ return extendForwards();
3773
+ case 8:
3774
+ // async
3775
+ latest.messageTable.scrollIntoView(newestFirst);
3776
+ case 9:
3777
+ case "end":
3778
+ return _context9.stop();
3779
+ }
3780
+ }, _callee9);
3781
+ }));
3782
+ return _scrollForwardButtonHandler.apply(this, arguments);
3783
+ };
3784
+ scrollForwardButtonHandler = function _scrollForwardButtonH(_x23) {
3785
+ return _scrollForwardButtonHandler.apply(this, arguments);
3786
+ };
3787
+ setScrollForwardButtonIcon = function _setScrollForwardButt() {
3788
+ if (!scrollForwardButton) return;
3789
+ var sense = messageTable.extendedForwards ? !newestFirst : newestFirst; // noun_T-Block_1114657_000000.svg
3790
+ var scrollForwardIcon = messageTable["final"] ? 'noun_T-Block_1114657_000000.svg' : getScrollForwardButtonIcon(sense);
3791
+ scrollForwardButton.firstChild.setAttribute('src', _iconBase.icons.iconBase + scrollForwardIcon);
3792
+ function getScrollForwardButtonIcon(sense) {
3793
+ return !sense ? 'noun_1369241.svg' : 'noun_1369237.svg';
3599
3794
  }
3600
- setScrollBackbuttonIcon();
3601
- return _context.abrupt("return", done);
3602
- case 6:
3603
- case "end":
3604
- return _context.stop();
3605
- }
3606
- }, _callee);
3607
- }));
3608
- return _extendBackwards.apply(this, arguments);
3609
- }
3610
- function setScrollBackbuttonIcon() {
3611
- if (!scrollBackbutton) {
3612
- return;
3613
- }
3614
- var sense = messageTable.extendedBack ? !newestFirst : newestFirst;
3615
- var scrollBackIcon = messageTable.initial ? 'noun_T-Block_1114655_000000.svg' : getScrollbackIcon(sense);
3616
- scrollBackbutton.firstChild.setAttribute('src', _iconBase.icons.iconBase + scrollBackIcon);
3617
- function getScrollbackIcon(sense) {
3618
- return sense ? 'noun_1369241.svg' : 'noun_1369237.svg';
3619
- }
3620
- }
3621
- function scrollBackbuttonHandler(_x8) {
3622
- return _scrollBackbuttonHandler.apply(this, arguments);
3623
- } /// ////////////// Scroll up adding more below
3624
- function _scrollBackbuttonHandler() {
3625
- _scrollBackbuttonHandler = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2(_event) {
3626
- return _regenerator["default"].wrap(function _callee2$(_context2) {
3627
- while (1) switch (_context2.prev = _context2.next) {
3628
- case 0:
3629
- if (!messageTable.extendedBack) {
3630
- _context2.next = 6;
3631
- break;
3795
+ };
3796
+ _extendForwards = function _extendForwards3() {
3797
+ _extendForwards = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee8() {
3798
+ var done;
3799
+ return _regenerator["default"].wrap(function _callee8$(_context8) {
3800
+ while (1) switch (_context8.prev = _context8.next) {
3801
+ case 0:
3802
+ _context8.next = 2;
3803
+ return insertPreviousMessages(false);
3804
+ case 2:
3805
+ done = _context8.sent;
3806
+ return _context8.abrupt("return", done);
3807
+ case 4:
3808
+ case "end":
3809
+ return _context8.stop();
3810
+ }
3811
+ }, _callee8);
3812
+ }));
3813
+ return _extendForwards.apply(this, arguments);
3814
+ };
3815
+ extendForwards = function _extendForwards2() {
3816
+ return _extendForwards.apply(this, arguments);
3817
+ };
3818
+ _scrollBackbuttonHandler = function _scrollBackbuttonHand2() {
3819
+ _scrollBackbuttonHandler = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee7(_event) {
3820
+ return _regenerator["default"].wrap(function _callee7$(_context7) {
3821
+ while (1) switch (_context7.prev = _context7.next) {
3822
+ case 0:
3823
+ if (!messageTable.extendedBack) {
3824
+ _context7.next = 6;
3825
+ break;
3826
+ }
3827
+ removePreviousMessages(true, messageTable);
3828
+ messageTable.extendedBack = false;
3829
+ setScrollBackbuttonIcon();
3830
+ _context7.next = 8;
3831
+ break;
3832
+ case 6:
3833
+ _context7.next = 8;
3834
+ return extendBackwards();
3835
+ case 8:
3836
+ case "end":
3837
+ return _context7.stop();
3838
+ }
3839
+ }, _callee7);
3840
+ }));
3841
+ return _scrollBackbuttonHandler.apply(this, arguments);
3842
+ };
3843
+ scrollBackbuttonHandler = function _scrollBackbuttonHand(_x22) {
3844
+ return _scrollBackbuttonHandler.apply(this, arguments);
3845
+ };
3846
+ setScrollBackbuttonIcon = function _setScrollBackbuttonI() {
3847
+ if (!scrollBackbutton) {
3848
+ return;
3632
3849
  }
3633
- removePreviousMessages(true, messageTable);
3634
- messageTable.extendedBack = false;
3635
- setScrollBackbuttonIcon();
3636
- _context2.next = 8;
3637
- break;
3638
- case 6:
3639
- _context2.next = 8;
3640
- return extendBackwards();
3641
- case 8:
3642
- case "end":
3643
- return _context2.stop();
3644
- }
3645
- }, _callee2);
3646
- }));
3647
- return _scrollBackbuttonHandler.apply(this, arguments);
3648
- }
3649
- function extendForwards() {
3650
- return _extendForwards.apply(this, arguments);
3651
- }
3652
- function _extendForwards() {
3653
- _extendForwards = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3() {
3654
- var done;
3655
- return _regenerator["default"].wrap(function _callee3$(_context3) {
3656
- while (1) switch (_context3.prev = _context3.next) {
3657
- case 0:
3658
- _context3.next = 2;
3659
- return insertPreviousMessages(false);
3660
- case 2:
3661
- done = _context3.sent;
3662
- if (done) {
3663
- scrollForwardButton.firstChild.setAttribute('src', _iconBase.icons.iconBase + 'noun_T-Block_1114655_000000.svg');
3664
- scrollForwardButton.disabled = true;
3665
- messageTable["final"] = true;
3850
+ var sense = messageTable.extendedBack ? !newestFirst : newestFirst;
3851
+ var scrollBackIcon = messageTable.initial ? 'noun_T-Block_1114655_000000.svg' : getScrollbackIcon(sense);
3852
+ scrollBackbutton.firstChild.setAttribute('src', _iconBase.icons.iconBase + scrollBackIcon);
3853
+ function getScrollbackIcon(sense) {
3854
+ return sense ? 'noun_1369241.svg' : 'noun_1369237.svg';
3855
+ }
3856
+ };
3857
+ _extendBackwards = function _extendBackwards3() {
3858
+ _extendBackwards = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee6() {
3859
+ var done;
3860
+ return _regenerator["default"].wrap(function _callee6$(_context6) {
3861
+ while (1) switch (_context6.prev = _context6.next) {
3862
+ case 0:
3863
+ _context6.next = 2;
3864
+ return insertPreviousMessages(true);
3865
+ case 2:
3866
+ done = _context6.sent;
3867
+ if (done) {
3868
+ if (scrollBackbutton) {
3869
+ scrollBackbutton.firstChild.setAttribute('src', _iconBase.icons.iconBase + 'noun_T-Block_1114655_000000.svg'); // T
3870
+ scrollBackbutton.disabled = true;
3871
+ }
3872
+ messageTable.initial = true;
3873
+ } else {
3874
+ messageTable.extendedBack = true;
3875
+ }
3876
+ setScrollBackbuttonIcon();
3877
+ return _context6.abrupt("return", done);
3878
+ case 6:
3879
+ case "end":
3880
+ return _context6.stop();
3881
+ }
3882
+ }, _callee6);
3883
+ }));
3884
+ return _extendBackwards.apply(this, arguments);
3885
+ };
3886
+ extendBackwards = function _extendBackwards2() {
3887
+ return _extendBackwards.apply(this, arguments);
3888
+ };
3889
+ scrollBackbutton = null; // was let
3890
+ scrollForwardButton = null; // was let
3891
+ /// ///////////////// Scroll down adding more above
3892
+ /// ///////////////////////
3893
+ /*
3894
+ options = options || {}
3895
+ options.authorDateOnLeft = true
3896
+ const newestFirst = options.newestFirst === '1' || options.newestFirst === true // hack for now
3897
+ const channelObject = new ChatChannel(chatChannel, options)
3898
+ const dateFolder = channelObject.dateFolder
3899
+ const div = dom.createElement('div')
3900
+ const statusArea = div.appendChild(dom.createElement('div'))
3901
+ const userContext = { dom, statusArea, div: statusArea } // logged on state, pointers to user's stuff
3902
+ */
3903
+ debug.log('Options for called message Area', options);
3904
+ messageTable = dom.createElement('table');
3905
+ messageTable.style.width = '100%'; // fill the pane div
3906
+ messageTable.extendBackwards = extendBackwards; // Make function available to scroll stuff
3907
+ messageTable.extendForwards = extendForwards; // Make function available to scroll stuff
3908
+
3909
+ messageTable.date = date;
3910
+ chatDocument = dateFolder.leafDocumentFromDate(date);
3911
+ messageTable.chatDocument = chatDocument;
3912
+ messageTable.fresh = false;
3913
+ messageTable.setAttribute('style', 'width: 100%;'); // fill that div!
3914
+ if (live) {
3915
+ messageTable["final"] = true;
3916
+ liveMessageTable = messageTable;
3917
+ latest.messageTable = messageTable;
3918
+ tr = (0, _message.renderMessageEditor)(channelObject, messageTable, userContext, options);
3919
+ if (newestFirst) {
3920
+ messageTable.insertBefore(tr, messageTable.firstChild); // If newestFirst
3666
3921
  } else {
3667
- messageTable.extendedForwards = true;
3922
+ messageTable.appendChild(tr); // not newestFirst
3668
3923
  }
3669
- setScrollForwardButtonIcon();
3670
- return _context3.abrupt("return", done);
3671
- case 6:
3672
- case "end":
3673
- return _context3.stop();
3674
- }
3675
- }, _callee3);
3676
- }));
3677
- return _extendForwards.apply(this, arguments);
3678
- }
3679
- function setScrollForwardButtonIcon() {
3680
- var sense = messageTable.extendedForwards ? !newestFirst : newestFirst; // noun_T-Block_1114657_000000.svg
3681
- var scrollForwardIcon = messageTable["final"] ? 'noun_T-Block_1114657_000000.svg' : getScrollForwardButtonIcon(sense);
3682
- scrollForwardButton.firstChild.setAttribute('src', _iconBase.icons.iconBase + scrollForwardIcon);
3683
- function getScrollForwardButtonIcon(sense) {
3684
- return !sense ? 'noun_1369241.svg' : 'noun_1369237.svg';
3685
- }
3686
- }
3687
- function scrollForwardButtonHandler(_x9) {
3688
- return _scrollForwardButtonHandler.apply(this, arguments);
3689
- } /// ///////////////////////
3690
- /*
3691
- options = options || {}
3692
- options.authorDateOnLeft = true
3693
- const newestFirst = options.newestFirst === '1' || options.newestFirst === true // hack for now
3694
- const channelObject = new ChatChannel(chatChannel, options)
3695
- const dateFolder = channelObject.dateFolder
3696
- const div = dom.createElement('div')
3697
- const statusArea = div.appendChild(dom.createElement('div'))
3698
- const userContext = { dom, statusArea, div: statusArea } // logged on state, pointers to user's stuff
3699
- */
3700
- function _scrollForwardButtonHandler() {
3701
- _scrollForwardButtonHandler = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4(_event) {
3702
- return _regenerator["default"].wrap(function _callee4$(_context4) {
3703
- while (1) switch (_context4.prev = _context4.next) {
3704
- case 0:
3705
- if (!messageTable.extendedForwards) {
3706
- _context4.next = 6;
3707
- break;
3924
+
3925
+ messageTable.inputRow = tr;
3926
+ }
3927
+
3928
+ /// ///// Infinite scroll
3929
+ //
3930
+ // @@ listen for swipe past end event not just button
3931
+ test = true;
3932
+ if (test) {
3933
+ // ws options.infinite but need for non-infinite
3934
+ titleTR = dom.createElement('tr');
3935
+ scrollBackbuttonCell = titleTR.appendChild(dom.createElement('td')); // up traingles: noun_1369237.svg
3936
+ // down triangles: noun_1369241.svg
3937
+ /*
3938
+ const scrollBackIcon = newestFirst
3939
+ ? 'noun_1369241.svg'
3940
+ : 'noun_1369237.svg' // down and up arrows respoctively
3941
+ scrollBackbutton = widgets.button(
3942
+ dom,
3943
+ icons.iconBase + scrollBackIcon,
3944
+ 'Previous messages ...'
3945
+ )
3946
+ scrollBackbuttonCell.style = 'width:3em; height:3em;'
3947
+ scrollBackbutton.addEventListener('click', scrollBackbuttonHandler, false)
3948
+ messageTable.extendedBack = false
3949
+ scrollBackbuttonCell.appendChild(scrollBackbutton)
3950
+ setScrollBackbuttonIcon()
3951
+ */
3952
+ dateCell = titleTR.appendChild(dom.createElement('td'));
3953
+ dateCell.style = 'text-align: center; vertical-align: middle; color: #888; font-style: italic;';
3954
+ dateCell.textContent = widgets.shortDate(date.toISOString(), true); // no time, only date
3955
+
3956
+ // @@@@@@@@@@@ todo move this button to other end of message cell, o
3957
+ scrollForwardButtonCell = titleTR.appendChild(dom.createElement('td'));
3958
+ if (options.includeRemoveButton) {
3959
+ scrollForwardButtonCell.appendChild(widgets.cancelButton(dom, function (_e) {
3960
+ div.parentNode.removeChild(div);
3961
+ }));
3708
3962
  }
3709
- removePreviousMessages(false, messageTable);
3963
+ /*
3964
+ const scrollForwardIcon = newestFirst
3965
+ ? 'noun_1369241.svg'
3966
+ : 'noun_1369237.svg' // down and up arrows respoctively
3967
+ scrollForwardButton = widgets.button(
3968
+ dom,
3969
+ icons.iconBase + scrollForwardIcon,
3970
+ 'Later messages ...'
3971
+ )
3972
+ scrollForwardButtonCell.appendChild(scrollForwardButton)
3973
+ scrollForwardButtonCell.style = 'width:3em; height:3em;'
3974
+ scrollForwardButton.addEventListener(
3975
+ 'click',
3976
+ scrollForwardButtonHandler,
3977
+ false
3978
+ )
3979
+ messageTable.extendedForward = false
3980
+ setScrollForwardButtonIcon()
3981
+ */
3710
3982
  messageTable.extendedForwards = false;
3711
- setScrollForwardButtonIcon();
3712
- _context4.next = 9;
3713
- break;
3714
- case 6:
3715
- _context4.next = 8;
3716
- return extendForwards();
3717
- case 8:
3718
- // async
3719
- latest.messageTable.scrollIntoView(newestFirst);
3720
- case 9:
3721
- case "end":
3722
- return _context4.stop();
3723
- }
3724
- }, _callee4);
3725
- }));
3726
- return _scrollForwardButtonHandler.apply(this, arguments);
3727
- }
3728
- var messageTable = dom.createElement('table');
3729
- messageTable.extendBackwards = extendBackwards; // Make function available to scroll stuff
3730
- messageTable.extendForwards = extendForwards; // Make function available to scroll stuff
3731
-
3732
- messageTable.date = date;
3733
- var chatDocument = dateFolder.leafDocumentFromDate(date);
3734
- messageTable.chatDocument = chatDocument;
3735
- messageTable.fresh = false;
3736
- messageTable.setAttribute('style', 'width: 100%;'); // fill that div!
3737
- if (live) {
3738
- messageTable["final"] = true;
3739
- liveMessageTable = messageTable;
3740
- latest.messageTable = messageTable;
3741
- var tr = (0, _message.renderMessageEditor)(channelObject, messageTable, userContext, options);
3742
- if (newestFirst) {
3743
- messageTable.insertBefore(tr, messageTable.firstChild); // If newestFirst
3744
- } else {
3745
- messageTable.appendChild(tr); // not newestFirst
3746
- }
3747
-
3748
- messageTable.inputRow = tr;
3749
- }
3750
-
3751
- /// ///// Infinite scroll
3752
- //
3753
- // @@ listen for swipe past end event not just button
3754
- if (options.infinite) {
3755
- var scrollBackbuttonTR = dom.createElement('tr');
3756
- var scrollBackbuttonCell = scrollBackbuttonTR.appendChild(dom.createElement('td'));
3757
- // up traingles: noun_1369237.svg
3758
- // down triangles: noun_1369241.svg
3759
- var scrollBackIcon = newestFirst ? 'noun_1369241.svg' : 'noun_1369237.svg'; // down and up arrows respoctively
3760
- scrollBackbutton = widgets.button(dom, _iconBase.icons.iconBase + scrollBackIcon, 'Previous messages ...');
3761
- scrollBackbuttonCell.style = 'width:3em; height:3em;';
3762
- scrollBackbutton.addEventListener('click', scrollBackbuttonHandler, false);
3763
- messageTable.extendedBack = false;
3764
- scrollBackbuttonCell.appendChild(scrollBackbutton);
3765
- setScrollBackbuttonIcon();
3766
- var dateCell = scrollBackbuttonTR.appendChild(dom.createElement('td'));
3767
- dateCell.style = 'text-align: center; vertical-align: middle; color: #888; font-style: italic;';
3768
- dateCell.textContent = widgets.shortDate(date.toISOString(), true); // no time, only date
3769
-
3770
- // @@@@@@@@@@@ todo move this button to other end of message cell, o
3771
- var scrollForwardButtonCell = scrollBackbuttonTR.appendChild(dom.createElement('td'));
3772
- var scrollForwardIcon = newestFirst ? 'noun_1369241.svg' : 'noun_1369237.svg'; // down and up arrows respoctively
3773
- scrollForwardButton = widgets.button(dom, _iconBase.icons.iconBase + scrollForwardIcon, 'Later messages ...');
3774
- scrollForwardButtonCell.appendChild(scrollForwardButton);
3775
- scrollForwardButtonCell.style = 'width:3em; height:3em;';
3776
- scrollForwardButton.addEventListener('click', scrollForwardButtonHandler, false);
3777
- messageTable.extendedForward = false;
3778
- setScrollForwardButtonIcon();
3779
- messageTable.extendedForwards = false;
3780
- if (!newestFirst) {
3781
- // opposite end from the entry field
3782
- messageTable.insertBefore(scrollBackbuttonTR, messageTable.firstChild); // If not newestFirst
3783
- } else {
3784
- messageTable.appendChild(scrollBackbuttonTR); // newestFirst
3785
- }
3786
- }
3787
-
3788
- var sts = _solidLogic.store.statementsMatching(null, ns.wf('message'), null, chatDocument);
3789
- if (!live && sts.length === 0) {
3790
- // not todays
3791
- // no need buttomns at the moment
3792
- // messageTable.style.visibility = 'collapse' // Hide files with no messages
3793
- }
3794
- sts.forEach(function (st) {
3795
- addMessage(st.object, messageTable);
3796
- });
3797
- messageTable.fresh = true;
3798
-
3799
- // loadMessageTable(messageTable, chatDocument)
3800
- messageTable.fresh = false;
3801
- return messageTable;
3983
+ if (!newestFirst) {
3984
+ // opposite end from the entry field
3985
+ messageTable.insertBefore(titleTR, messageTable.firstChild); // If not newestFirst
3986
+ } else {
3987
+ messageTable.appendChild(titleTR); // newestFirst
3988
+ }
3989
+ }
3990
+ sts = _solidLogic.store.statementsMatching(null, ns.wf('message'), null, chatDocument);
3991
+ if (!live && sts.length === 0) {
3992
+ // not todays
3993
+ // no need buttomns at the moment
3994
+ // messageTable.style.visibility = 'collapse' // Hide files with no messages
3995
+ }
3996
+ _iterator2 = _createForOfIteratorHelper(sts);
3997
+ _context10.prev = 28;
3998
+ _iterator2.s();
3999
+ case 30:
4000
+ if ((_step2 = _iterator2.n()).done) {
4001
+ _context10.next = 36;
4002
+ break;
4003
+ }
4004
+ st = _step2.value;
4005
+ _context10.next = 34;
4006
+ return addMessage(st.object, messageTable);
4007
+ case 34:
4008
+ _context10.next = 30;
4009
+ break;
4010
+ case 36:
4011
+ _context10.next = 41;
4012
+ break;
4013
+ case 38:
4014
+ _context10.prev = 38;
4015
+ _context10.t0 = _context10["catch"](28);
4016
+ _iterator2.e(_context10.t0);
4017
+ case 41:
4018
+ _context10.prev = 41;
4019
+ _iterator2.f();
4020
+ return _context10.finish(41);
4021
+ case 44:
4022
+ messageTable.fresh = true;
4023
+
4024
+ // loadMessageTable(messageTable, chatDocument)
4025
+ messageTable.fresh = false;
4026
+ return _context10.abrupt("return", messageTable);
4027
+ case 47:
4028
+ case "end":
4029
+ return _context10.stop();
4030
+ }
4031
+ }, _callee10, null, [[28, 38, 41, 44]]);
4032
+ }));
4033
+ return _renderMessageTable.apply(this, arguments);
4034
+ };
4035
+ renderMessageTable = function _renderMessageTable2(_x18, _x19) {
4036
+ return _renderMessageTable.apply(this, arguments);
3802
4037
  };
3803
4038
  _createMessageTable = function _createMessageTable3() {
3804
- _createMessageTable = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee6(date, live) {
4039
+ _createMessageTable = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee5(date, live) {
3805
4040
  var chatDocument, messageTable, statusTR;
3806
- return _regenerator["default"].wrap(function _callee6$(_context6) {
3807
- while (1) switch (_context6.prev = _context6.next) {
4041
+ return _regenerator["default"].wrap(function _callee5$(_context5) {
4042
+ while (1) switch (_context5.prev = _context5.next) {
3808
4043
  case 0:
3809
4044
  debug.log(' createMessageTable for ' + date);
3810
4045
  chatDocument = dateFolder.leafDocumentFromDate(date);
3811
- _context6.prev = 2;
3812
- _context6.next = 5;
4046
+ _context5.prev = 2;
4047
+ _context5.next = 5;
3813
4048
  return _solidLogic.store.fetcher.load(chatDocument);
3814
4049
  case 5:
3815
- _context6.next = 19;
4050
+ _context5.next = 21;
3816
4051
  break;
3817
4052
  case 7:
3818
- _context6.prev = 7;
3819
- _context6.t0 = _context6["catch"](2);
4053
+ _context5.prev = 7;
4054
+ _context5.t0 = _context5["catch"](2);
3820
4055
  messageTable = dom.createElement('table');
3821
4056
  statusTR = messageTable.appendChild(dom.createElement('tr')); // ### find status in exception
3822
- if (!(_context6.t0.response && _context6.t0.response.status && _context6.t0.response.status === 404)) {
3823
- _context6.next = 16;
4057
+ if (!(_context5.t0.response && _context5.t0.response.status && _context5.t0.response.status === 404)) {
4058
+ _context5.next = 18;
3824
4059
  break;
3825
4060
  }
3826
4061
  debug.log('Error 404 for chat file ' + chatDocument);
3827
- return _context6.abrupt("return", renderMessageTable(date, live));
3828
- case 16:
3829
- debug.log('*** Error NON 404 for chat file ' + chatDocument);
3830
- statusTR.appendChild(widgets.errorMessageBlock(dom, _context6.t0, 'pink'));
4062
+ _context5.next = 15;
4063
+ return renderMessageTable(date, live);
4064
+ case 15:
4065
+ return _context5.abrupt("return", _context5.sent);
3831
4066
  case 18:
3832
- return _context6.abrupt("return", statusTR);
3833
- case 19:
3834
- return _context6.abrupt("return", renderMessageTable(date, live));
4067
+ debug.log('*** Error NON 404 for chat file ' + chatDocument);
4068
+ statusTR.appendChild(widgets.errorMessageBlock(dom, _context5.t0, 'pink'));
3835
4069
  case 20:
4070
+ return _context5.abrupt("return", statusTR);
4071
+ case 21:
4072
+ _context5.next = 23;
4073
+ return renderMessageTable(date, live);
4074
+ case 23:
4075
+ return _context5.abrupt("return", _context5.sent);
4076
+ case 24:
3836
4077
  case "end":
3837
- return _context6.stop();
4078
+ return _context5.stop();
3838
4079
  }
3839
- }, _callee6, null, [[2, 7]]);
4080
+ }, _callee5, null, [[2, 7]]);
3840
4081
  }));
3841
4082
  return _createMessageTable.apply(this, arguments);
3842
4083
  };
3843
- createMessageTable = function _createMessageTable2(_x6, _x7) {
4084
+ createMessageTable = function _createMessageTable2(_x16, _x17) {
3844
4085
  return _createMessageTable.apply(this, arguments);
3845
4086
  };
3846
4087
  removePreviousMessages = function _removePreviousMessag(backwards, messageTable) {
@@ -3859,31 +4100,31 @@ function _infiniteMessageArea() {
3859
4100
  extr.messageTable = messageTable;
3860
4101
  };
3861
4102
  _insertPreviousMessages = function _insertPreviousMessag2() {
3862
- _insertPreviousMessages = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee5(backwards) {
4103
+ _insertPreviousMessages = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4(backwards) {
3863
4104
  var extremity, date, live, todayDoc, doc, newMessageTable;
3864
- return _regenerator["default"].wrap(function _callee5$(_context5) {
3865
- while (1) switch (_context5.prev = _context5.next) {
4105
+ return _regenerator["default"].wrap(function _callee4$(_context4) {
4106
+ while (1) switch (_context4.prev = _context4.next) {
3866
4107
  case 0:
3867
4108
  extremity = backwards ? earliest : latest;
3868
4109
  date = extremity.messageTable.date; // day in mssecs
3869
- _context5.next = 4;
4110
+ _context4.next = 4;
3870
4111
  return dateFolder.loadPrevious(date, backwards);
3871
4112
  case 4:
3872
- date = _context5.sent;
4113
+ date = _context4.sent;
3873
4114
  // backwards
3874
4115
  debug.log("insertPreviousMessages: from ".concat(backwards ? 'backwards' : 'forwards', " loadPrevious: ").concat(date));
3875
4116
  if (!(!date && !backwards && !liveMessageTable)) {
3876
- _context5.next = 9;
4117
+ _context4.next = 9;
3877
4118
  break;
3878
4119
  }
3879
- _context5.next = 9;
4120
+ _context4.next = 9;
3880
4121
  return appendCurrentMessages();
3881
4122
  case 9:
3882
4123
  if (date) {
3883
- _context5.next = 11;
4124
+ _context4.next = 11;
3884
4125
  break;
3885
4126
  }
3886
- return _context5.abrupt("return", true);
4127
+ return _context4.abrupt("return", true);
3887
4128
  case 11:
3888
4129
  // done
3889
4130
  live = false;
@@ -3892,10 +4133,10 @@ function _infiniteMessageArea() {
3892
4133
  doc = dateFolder.leafDocumentFromDate(date);
3893
4134
  live = doc.sameTerm(todayDoc); // Is this todays?
3894
4135
  }
3895
- _context5.next = 15;
4136
+ _context4.next = 15;
3896
4137
  return createMessageTable(date, live);
3897
4138
  case 15:
3898
- newMessageTable = _context5.sent;
4139
+ newMessageTable = _context4.sent;
3899
4140
  extremity.messageTable = newMessageTable; // move pointer to earliest
3900
4141
  if (backwards ? newestFirst : !newestFirst) {
3901
4142
  // put on bottom or top
@@ -3904,62 +4145,158 @@ function _infiniteMessageArea() {
3904
4145
  // put on top as we scroll back
3905
4146
  div.insertBefore(newMessageTable, div.firstChild);
3906
4147
  }
3907
- return _context5.abrupt("return", live);
4148
+ return _context4.abrupt("return", live);
3908
4149
  case 19:
3909
4150
  case "end":
3910
- return _context5.stop();
4151
+ return _context4.stop();
3911
4152
  }
3912
- }, _callee5);
4153
+ }, _callee4);
3913
4154
  }));
3914
4155
  return _insertPreviousMessages.apply(this, arguments);
3915
4156
  };
3916
- insertPreviousMessages = function _insertPreviousMessag(_x5) {
4157
+ insertPreviousMessages = function _insertPreviousMessag(_x15) {
3917
4158
  return _insertPreviousMessages.apply(this, arguments);
3918
4159
  };
3919
- addMessage = function _addMessage(message, messageTable) {
3920
- var latest = (0, _chatLogic.mostRecentVersion)(message);
3921
- // const content = store.any(latest, ns.sioc('content'))
3922
- if ((0, _chatLogic.isDeleted)(latest) && !options.showDeletedMessages) {
3923
- return; // ignore deleted messaged -- @@ could also leave a placeholder
3924
- }
3925
-
3926
- insertMessageIntoTable(channelObject, messageTable, message, messageTable.fresh, options, userContext); // fresh from elsewhere
4160
+ _addMessage = function _addMessage3() {
4161
+ _addMessage = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3(message, messageTable) {
4162
+ var latest, thread, id;
4163
+ return _regenerator["default"].wrap(function _callee3$(_context3) {
4164
+ while (1) switch (_context3.prev = _context3.next) {
4165
+ case 0:
4166
+ _context3.next = 2;
4167
+ return (0, _chatLogic.mostRecentVersion)(message);
4168
+ case 2:
4169
+ latest = _context3.sent;
4170
+ if (!((0, _chatLogic.isDeleted)(latest) && !options.showDeletedMessages)) {
4171
+ _context3.next = 5;
4172
+ break;
4173
+ }
4174
+ return _context3.abrupt("return");
4175
+ case 5:
4176
+ thread = _solidLogic.store.any(null, ns.sioc('has_member'), message, message.doc());
4177
+ id = _solidLogic.store.any(message, ns.sioc('id'), null, message.doc());
4178
+ if (id && !thread) {
4179
+ thread = _solidLogic.store.any(null, ns.sioc('has_member'), id, message.doc());
4180
+ }
4181
+ if (!options.thread) {
4182
+ _context3.next = 21;
4183
+ break;
4184
+ }
4185
+ if (!_solidLogic.store.holds(message, ns.sioc('has_reply'), options.thread)) {
4186
+ _context3.next = 13;
4187
+ break;
4188
+ }
4189
+ // root of thread
4190
+ debug.log(' addMessage: displaying root of thread ' + thread);
4191
+ _context3.next = 19;
4192
+ break;
4193
+ case 13:
4194
+ if (!(thread && thread.sameTerm(options.thread))) {
4195
+ _context3.next = 17;
4196
+ break;
4197
+ }
4198
+ debug.log(' addMessage: Displaying body of thread ' + message.uri.slice(-10));
4199
+ _context3.next = 19;
4200
+ break;
4201
+ case 17:
4202
+ debug.log(' addMessage: Suppress non-thread message in thread table ' + message.uri.slice(-10));
4203
+ return _context3.abrupt("return");
4204
+ case 19:
4205
+ _context3.next = 27;
4206
+ break;
4207
+ case 21:
4208
+ if (!thread) {
4209
+ _context3.next = 26;
4210
+ break;
4211
+ }
4212
+ debug.log(' addMessage: Suppress thread message in non-thread table ' + message.uri.slice(-10));
4213
+ return _context3.abrupt("return");
4214
+ case 26:
4215
+ debug.log(' addMessage: Normal non-thread message in non-thread table ' + message.uri.slice(-10));
4216
+ case 27:
4217
+ _context3.next = 29;
4218
+ return insertMessageIntoTable(channelObject, messageTable, message, messageTable.fresh, options, userContext);
4219
+ case 29:
4220
+ case "end":
4221
+ return _context3.stop();
4222
+ }
4223
+ }, _callee3);
4224
+ }));
4225
+ return _addMessage.apply(this, arguments);
3927
4226
  };
3928
- syncMessages = function _syncMessages(about, messageTable) {
3929
- var displayed = {};
3930
- var ele, ele2;
3931
- for (ele = messageTable.firstChild; ele; ele = ele.nextSibling) {
3932
- if (ele.AJAR_subject) {
3933
- displayed[ele.AJAR_subject.uri] = true;
3934
- }
3935
- }
3936
- var messages = _solidLogic.store.statementsMatching(about, ns.wf('message'), null, messageTable.chatDocument).map(function (st) {
3937
- return st.object;
3938
- });
3939
- var stored = {};
3940
- messages.forEach(function (m) {
3941
- stored[m.uri] = true;
3942
- if (!displayed[m.uri]) {
3943
- addMessage(m, messageTable);
3944
- }
3945
- });
3946
-
3947
- // eslint-disable-next-line space-in-parens
3948
- for (ele = messageTable.firstChild; ele;) {
3949
- ele2 = ele.nextSibling;
3950
- if (ele.AJAR_subject && !stored[ele.AJAR_subject.uri]) {
3951
- messageTable.removeChild(ele);
3952
- }
3953
- ele = ele2;
3954
- }
3955
- for (ele = messageTable.firstChild; ele; ele = ele.nextSibling) {
3956
- if (ele.AJAR_subject) {
3957
- // Refresh thumbs up etc
3958
- widgets.refreshTree(ele); // Things inside may have changed too
3959
- }
3960
- }
4227
+ addMessage = function _addMessage2(_x13, _x14) {
4228
+ return _addMessage.apply(this, arguments);
4229
+ };
4230
+ _syncMessages = function _syncMessages3() {
4231
+ _syncMessages = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2(chatChannel, messageTable) {
4232
+ var displayed, ele, ele2, messages, stored, _iterator, _step, m;
4233
+ return _regenerator["default"].wrap(function _callee2$(_context2) {
4234
+ while (1) switch (_context2.prev = _context2.next) {
4235
+ case 0:
4236
+ displayed = {};
4237
+ for (ele = messageTable.firstChild; ele; ele = ele.nextSibling) {
4238
+ if (ele.AJAR_subject) {
4239
+ displayed[ele.AJAR_subject.uri] = true;
4240
+ }
4241
+ }
4242
+ messages = _solidLogic.store.each(chatChannel, ns.wf('message'), null, messageTable.chatDocument);
4243
+ stored = {};
4244
+ _iterator = _createForOfIteratorHelper(messages);
4245
+ _context2.prev = 5;
4246
+ _iterator.s();
4247
+ case 7:
4248
+ if ((_step = _iterator.n()).done) {
4249
+ _context2.next = 15;
4250
+ break;
4251
+ }
4252
+ m = _step.value;
4253
+ stored[m.uri] = true;
4254
+ if (displayed[m.uri]) {
4255
+ _context2.next = 13;
4256
+ break;
4257
+ }
4258
+ _context2.next = 13;
4259
+ return addMessage(m, messageTable);
4260
+ case 13:
4261
+ _context2.next = 7;
4262
+ break;
4263
+ case 15:
4264
+ _context2.next = 20;
4265
+ break;
4266
+ case 17:
4267
+ _context2.prev = 17;
4268
+ _context2.t0 = _context2["catch"](5);
4269
+ _iterator.e(_context2.t0);
4270
+ case 20:
4271
+ _context2.prev = 20;
4272
+ _iterator.f();
4273
+ return _context2.finish(20);
4274
+ case 23:
4275
+ // eslint-disable-next-line space-in-parens
4276
+ for (ele = messageTable.firstChild; ele;) {
4277
+ ele2 = ele.nextSibling;
4278
+ if (ele.AJAR_subject && !stored[ele.AJAR_subject.uri]) {
4279
+ messageTable.removeChild(ele);
4280
+ }
4281
+ ele = ele2;
4282
+ }
4283
+ for (ele = messageTable.firstChild; ele; ele = ele.nextSibling) {
4284
+ if (ele.AJAR_subject) {
4285
+ // Refresh thumbs up etc
4286
+ widgets.refreshTree(ele); // Things inside may have changed too
4287
+ }
4288
+ }
4289
+ case 25:
4290
+ case "end":
4291
+ return _context2.stop();
4292
+ }
4293
+ }, _callee2, null, [[5, 17, 20, 23]]);
4294
+ }));
4295
+ return _syncMessages.apply(this, arguments);
4296
+ };
4297
+ syncMessages = function _syncMessages2(_x11, _x12) {
4298
+ return _syncMessages.apply(this, arguments);
3961
4299
  };
3962
-
3963
4300
  // Body of main function
3964
4301
 
3965
4302
  options = options || {};
@@ -3975,7 +4312,6 @@ function _infiniteMessageArea() {
3975
4312
  statusArea: statusArea,
3976
4313
  div: statusArea
3977
4314
  }; // logged on state, pointers to user's stuff
3978
- // const messageTable = dom.createElement('table') // @@ check does this go in renderMessageTable
3979
4315
  earliest = {
3980
4316
  messageTable: null
3981
4317
  }; // Stuff about each end of the loaded days
@@ -3983,15 +4319,15 @@ function _infiniteMessageArea() {
3983
4319
  messageTable: null
3984
4320
  };
3985
4321
  lock = false;
3986
- _context12.next = 30;
4322
+ _context16.next = 33;
3987
4323
  return loadInitialContent();
3988
- case 30:
3989
- return _context12.abrupt("return", div);
3990
- case 31:
4324
+ case 33:
4325
+ return _context16.abrupt("return", div);
4326
+ case 34:
3991
4327
  case "end":
3992
- return _context12.stop();
4328
+ return _context16.stop();
3993
4329
  }
3994
- }, _callee12);
4330
+ }, _callee16);
3995
4331
  }));
3996
4332
  return _infiniteMessageArea.apply(this, arguments);
3997
4333
  }
@@ -4020,6 +4356,7 @@ exports.renderMessageEditor = renderMessageEditor;
4020
4356
  exports.renderMessageRow = renderMessageRow;
4021
4357
  exports.switchToEditor = switchToEditor;
4022
4358
  var _regenerator = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/regenerator */ "./node_modules/@babel/runtime/regenerator/index.js"));
4359
+ var _defineProperty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "./node_modules/@babel/runtime/helpers/defineProperty.js"));
4023
4360
  var _asyncToGenerator2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ "./node_modules/@babel/runtime/helpers/asyncToGenerator.js"));
4024
4361
  var _infinite = __webpack_require__(/*! ./infinite */ "./lib/chat/infinite.js");
4025
4362
  var _messageTools = __webpack_require__(/*! ./messageTools */ "./lib/chat/messageTools.js");
@@ -4037,7 +4374,9 @@ var utils = _interopRequireWildcard(__webpack_require__(/*! ../utils */ "./lib/u
4037
4374
  var widgets = _interopRequireWildcard(__webpack_require__(/*! ../widgets */ "./lib/widgets/index.js"));
4038
4375
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
4039
4376
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
4040
- function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
4377
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
4378
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
4379
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
4041
4380
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
4042
4381
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
4043
4382
  var dom = window.document;
@@ -4116,122 +4455,232 @@ function creatorAndDateHorizontal(td1, creator, date, message) {
4116
4455
  /**
4117
4456
  * Renders a chat message, read-only mode
4118
4457
  */
4119
- function renderMessageRow(channelObject, message, fresh, options, userContext) {
4120
- var colorizeByAuthor = options.colorizeByAuthor === '1' || options.colorizeByAuthor === true;
4121
- var creator = _solidLogic.store.any(message, ns.foaf('maker'));
4122
- var date = _solidLogic.store.any(message, ns.dct('created'));
4123
- var latestVersion = (0, _chatLogic.mostRecentVersion)(message);
4124
- var content = _solidLogic.store.any(latestVersion, ns.sioc('content'));
4125
- var originalMessage = (0, _chatLogic.originalVersion)(message);
4126
- var edited = !message.sameTerm(originalMessage);
4127
- var sortDate = _solidLogic.store.the(originalMessage, ns.dct('created'), null, originalMessage.doc()); // In message
4128
-
4129
- var messageRow = dom.createElement('tr');
4130
- messageRow.AJAR_date = sortDate.value;
4131
- messageRow.AJAR_subject = message;
4132
- var td1 = dom.createElement('td');
4133
- messageRow.appendChild(td1);
4134
- if (!options.authorDateOnLeft) {
4135
- var img = dom.createElement('img');
4136
- img.setAttribute('style', 'max-height: 2.5em; max-width: 2.5em; border-radius: 0.5em; margin: auto;');
4137
- widgets.setImage(img, creator);
4138
- td1.appendChild(img);
4139
- } else {
4140
- creatorAndDate(td1, creator, widgets.shortDate(sortDate.value), message);
4141
- }
4142
- var bothDates = widgets.shortDate(sortDate.value);
4143
- if (edited) {
4144
- bothDates += ' ... ' + widgets.shortDate(date.value);
4145
- }
4146
-
4147
- // Render the content ot the message itself
4148
- var td2 = messageRow.appendChild(dom.createElement('td'));
4149
- if (!options.authorDateOnLeft) {
4150
- creatorAndDateHorizontal(td2, creator, bothDates,
4151
- // widgets.shortDate(dateString)
4152
- message);
4153
- }
4154
- var text = content.value.trim();
4155
- var isURI = /^https?:\/[^ <>]*$/i.test(text);
4156
- var para = null;
4157
- if (isURI) {
4158
- var isImage = /\.(gif|jpg|jpeg|tiff|png|svg)$/i.test(text); // @@ Should use content-type not URI
4159
- if (isImage && options.expandImagesInline) {
4160
- var _img = elementForImageURI(text, options);
4161
- td2.appendChild(_img);
4162
- } else {
4163
- // Link but not Image
4164
- var anc = td2.appendChild(dom.createElement('a'));
4165
- para = anc.appendChild(dom.createElement('p'));
4166
- anc.href = text;
4167
- para.textContent = text;
4168
- td2.appendChild(anc);
4169
- }
4170
- } else {
4171
- // text
4172
- para = dom.createElement('p');
4173
- td2.appendChild(para);
4174
- para.textContent = text;
4175
- }
4176
- if (para) {
4177
- var bgcolor = colorizeByAuthor ? pad.lightColorHash(creator) : getBgColor(fresh);
4178
- para.setAttribute('style', messageBodyStyle + 'background-color: ' + bgcolor + ';');
4179
- }
4180
- function getBgColor(fresh) {
4181
- return fresh ? '#e8ffe8' : 'white';
4182
- }
4183
-
4184
- // Sentiment strip
4185
- var strip = (0, _messageTools.sentimentStripLinked)(message, message.doc());
4186
- if (strip.children.length) {
4187
- td2.appendChild(dom.createElement('br'));
4188
- td2.appendChild(strip);
4189
- }
4190
-
4191
- // Message tool bar button
4192
- var td3 = dom.createElement('td');
4193
- messageRow.appendChild(td3);
4194
- var toolsButton = widgets.button(dom, _iconBase.icons.iconBase + 'noun_243787.svg', '...');
4195
- td3.appendChild(toolsButton);
4196
- toolsButton.addEventListener('click', function (_event) {
4197
- if (messageRow.toolTR) {
4198
- // already got a toolbar? Toogle
4199
- messageRow.parentNode.removeChild(messageRow.toolTR);
4200
- delete messageRow.toolTR;
4201
- return;
4202
- }
4203
- var toolsTR = dom.createElement('tr');
4204
- var tools = (0, _messageTools.messageToolbar)(message, messageRow, userContext, channelObject);
4205
- tools.style = 'border: 0.05em solid #888; border-radius: 0 0 0.7em 0.7em; border-top: 0; height:3.5em; background-color: #fff;'; // @@ fix
4206
- if (messageRow.nextSibling) {
4207
- messageRow.parentElement.insertBefore(toolsTR, messageRow.nextSibling);
4208
- } else {
4209
- messageRow.parentElement.appendChild(toolsTR);
4210
- }
4211
- messageRow.toolTR = toolsTR;
4212
- toolsTR.appendChild(dom.createElement('td')); // left
4213
- var toolsTD = toolsTR.appendChild(dom.createElement('td'));
4214
- toolsTR.appendChild(dom.createElement('td')); // right
4215
- toolsTD.appendChild(tools);
4216
- });
4217
- return messageRow;
4458
+ function renderMessageRow(_x, _x2, _x3, _x4, _x5) {
4459
+ return _renderMessageRow.apply(this, arguments);
4460
+ }
4461
+ function _renderMessageRow() {
4462
+ _renderMessageRow = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee9(channelObject, message, fresh, options, userContext) {
4463
+ var colorizeByAuthor, creator, date, latestVersion, content, versions, replies, thread, straightReplies, _iterator2, _step2, reply, originalMessage, edited, sortDate, messageRow, td1, img, bothDates, td2, text, isURI, para, isImage, _img, anc, bgcolor, getBgColor, strip, td3, toolsButton;
4464
+ return _regenerator["default"].wrap(function _callee9$(_context10) {
4465
+ while (1) switch (_context10.prev = _context10.next) {
4466
+ case 0:
4467
+ getBgColor = function _getBgColor(fresh) {
4468
+ return fresh ? '#e8ffe8' : 'white';
4469
+ };
4470
+ colorizeByAuthor = options.colorizeByAuthor === '1' || options.colorizeByAuthor === true;
4471
+ creator = _solidLogic.store.any(message, ns.foaf('maker'));
4472
+ date = _solidLogic.store.any(message, ns.dct('created'));
4473
+ _context10.next = 6;
4474
+ return (0, _chatLogic.mostRecentVersion)(message);
4475
+ case 6:
4476
+ latestVersion = _context10.sent;
4477
+ content = _solidLogic.store.any(latestVersion, ns.sioc('content')); // const id = store.any(latestVersion, ns.sioc('id'))
4478
+ // const replies = store.each(latestVersion, ns.sioc('has_reply'))
4479
+ _context10.next = 10;
4480
+ return (0, _chatLogic.allVersions)(message);
4481
+ case 10:
4482
+ versions = _context10.sent;
4483
+ if (versions.length > 1) {
4484
+ debug.log('renderMessageRow versions: ', versions.join(', '));
4485
+ }
4486
+ // be tolerant in accepting replies on any version of a message
4487
+ replies = versions.map(function (version) {
4488
+ return _solidLogic.store.each(version, ns.sioc('has_reply'));
4489
+ }).flat();
4490
+ thread = null;
4491
+ straightReplies = [];
4492
+ _iterator2 = _createForOfIteratorHelper(replies);
4493
+ try {
4494
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
4495
+ reply = _step2.value;
4496
+ if (_solidLogic.store.holds(reply, ns.rdf('type'), ns.sioc('Thread'))) {
4497
+ thread = reply;
4498
+ debug.log('renderMessageRow: found thread: ' + thread);
4499
+ } else {
4500
+ straightReplies.push(reply);
4501
+ }
4502
+ }
4503
+ } catch (err) {
4504
+ _iterator2.e(err);
4505
+ } finally {
4506
+ _iterator2.f();
4507
+ }
4508
+ if (straightReplies.length > 1) {
4509
+ debug.log('renderMessageRow: found normal replies: ', straightReplies);
4510
+ }
4511
+ _context10.next = 20;
4512
+ return (0, _chatLogic.originalVersion)(message);
4513
+ case 20:
4514
+ originalMessage = _context10.sent;
4515
+ edited = !message.sameTerm(originalMessage); // @@ load it first @@ Or display the new data at the old date.
4516
+ // @@@ kludge!
4517
+ sortDate = _solidLogic.store.the(originalMessage, ns.dct('created'), null, originalMessage.doc()) || _solidLogic.store.the(message, ns.dct('created'), null, message.doc()); // In message
4518
+ messageRow = dom.createElement('tr');
4519
+ messageRow.AJAR_date = sortDate.value;
4520
+ messageRow.AJAR_subject = message;
4521
+ td1 = dom.createElement('td');
4522
+ messageRow.appendChild(td1);
4523
+ if (!options.authorDateOnLeft) {
4524
+ img = dom.createElement('img');
4525
+ img.setAttribute('style', 'max-height: 2.5em; max-width: 2.5em; border-radius: 0.5em; margin: auto;');
4526
+ widgets.setImage(img, creator);
4527
+ td1.appendChild(img);
4528
+ } else {
4529
+ creatorAndDate(td1, creator, widgets.shortDate(sortDate.value), message);
4530
+ }
4531
+ bothDates = widgets.shortDate(sortDate.value);
4532
+ if (edited) {
4533
+ bothDates += ' ... ' + widgets.shortDate(date.value);
4534
+ }
4535
+
4536
+ // Render the content ot the message itself
4537
+ td2 = messageRow.appendChild(dom.createElement('td'));
4538
+ if (!options.authorDateOnLeft) {
4539
+ creatorAndDateHorizontal(td2, creator, bothDates,
4540
+ // widgets.shortDate(dateString)
4541
+ message);
4542
+ }
4543
+ text = content ? content.value.trim() : '??? no content?';
4544
+ isURI = /^https?:\/[^ <>]*$/i.test(text);
4545
+ para = null;
4546
+ if (isURI) {
4547
+ isImage = /\.(gif|jpg|jpeg|tiff|png|svg)$/i.test(text); // @@ Should use content-type not URI
4548
+ if (isImage && options.expandImagesInline) {
4549
+ _img = elementForImageURI(text, options);
4550
+ td2.appendChild(_img);
4551
+ } else {
4552
+ // Link but not Image
4553
+ anc = td2.appendChild(dom.createElement('a'));
4554
+ para = anc.appendChild(dom.createElement('p'));
4555
+ anc.href = text;
4556
+ para.textContent = text;
4557
+ td2.appendChild(anc);
4558
+ }
4559
+ } else {
4560
+ // text
4561
+ para = dom.createElement('p');
4562
+ td2.appendChild(para);
4563
+ para.textContent = text;
4564
+ }
4565
+ if (para) {
4566
+ bgcolor = colorizeByAuthor ? pad.lightColorHash(creator) : getBgColor(fresh);
4567
+ para.setAttribute('style', messageBodyStyle + 'background-color: ' + bgcolor + ';');
4568
+ }
4569
+ _context10.next = 40;
4570
+ return (0, _messageTools.sentimentStripLinked)(message, message.doc());
4571
+ case 40:
4572
+ strip = _context10.sent;
4573
+ if (strip.children.length) {
4574
+ td2.appendChild(dom.createElement('br'));
4575
+ td2.appendChild(strip);
4576
+ }
4577
+
4578
+ // Message tool bar button
4579
+ td3 = dom.createElement('td');
4580
+ messageRow.appendChild(td3);
4581
+ toolsButton = widgets.button(dom, _iconBase.icons.iconBase + 'noun_243787.svg', '...');
4582
+ td3.appendChild(toolsButton);
4583
+ toolsButton.addEventListener('click', /*#__PURE__*/function () {
4584
+ var _ref4 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee8(_event) {
4585
+ var toolsTR, tools, toolsTD;
4586
+ return _regenerator["default"].wrap(function _callee8$(_context9) {
4587
+ while (1) switch (_context9.prev = _context9.next) {
4588
+ case 0:
4589
+ if (!messageRow.toolTR) {
4590
+ _context9.next = 4;
4591
+ break;
4592
+ }
4593
+ // already got a toolbar? Toogle
4594
+ messageRow.parentNode.removeChild(messageRow.toolTR);
4595
+ delete messageRow.toolTR;
4596
+ return _context9.abrupt("return");
4597
+ case 4:
4598
+ toolsTR = dom.createElement('tr');
4599
+ _context9.next = 7;
4600
+ return (0, _messageTools.messageToolbar)(message, messageRow, _objectSpread(_objectSpread({}, userContext), {}, {
4601
+ chatOptions: options
4602
+ }), channelObject);
4603
+ case 7:
4604
+ tools = _context9.sent;
4605
+ tools.style = 'border: 0.05em solid #888; border-radius: 0 0 0.7em 0.7em; border-top: 0; height:3.5em; background-color: #fff;'; // @@ fix
4606
+ if (messageRow.nextSibling) {
4607
+ messageRow.parentElement.insertBefore(toolsTR, messageRow.nextSibling);
4608
+ } else {
4609
+ messageRow.parentElement.appendChild(toolsTR);
4610
+ }
4611
+ messageRow.toolTR = toolsTR;
4612
+ toolsTR.appendChild(dom.createElement('td')); // left
4613
+ toolsTD = toolsTR.appendChild(dom.createElement('td'));
4614
+ toolsTR.appendChild(dom.createElement('td')); // right
4615
+ toolsTD.appendChild(tools);
4616
+ case 15:
4617
+ case "end":
4618
+ return _context9.stop();
4619
+ }
4620
+ }, _callee8);
4621
+ }));
4622
+ return function (_x20) {
4623
+ return _ref4.apply(this, arguments);
4624
+ };
4625
+ }());
4626
+ if (thread && options.showThread) {
4627
+ debug.log(' message has thread ' + thread);
4628
+ td3.appendChild(widgets.button(dom, _iconBase.icons.iconBase + 'noun_1180164.svg',
4629
+ // right arrow .. @@ think of stg better
4630
+ 'see thread', function (_e) {
4631
+ debug.log('@@@@ Calling showThread thread ' + thread);
4632
+ options.showThread(thread, options);
4633
+ }));
4634
+ }
4635
+ return _context10.abrupt("return", messageRow);
4636
+ case 49:
4637
+ case "end":
4638
+ return _context10.stop();
4639
+ }
4640
+ }, _callee9);
4641
+ }));
4642
+ return _renderMessageRow.apply(this, arguments);
4218
4643
  }
4219
- function switchToEditor(messageRow, message, channelObject, userContext) {
4220
- var messageTable = messageRow.parentNode;
4221
- var editRow = renderMessageEditor(channelObject, messageTable, userContext, channelObject.options, (0, _chatLogic.mostRecentVersion)(message));
4222
- messageTable.insertBefore(editRow, messageRow);
4223
- editRow.originalRow = messageRow;
4224
- messageRow.style.visibility = 'hidden'; // Hide the original message. unhide if user cancels edit
4644
+ function switchToEditor(_x6, _x7, _x8, _x9) {
4645
+ return _switchToEditor.apply(this, arguments);
4225
4646
  }
4226
4647
  /* Control for a new message -- or editing an old message ***************
4227
4648
  *
4228
4649
  */
4650
+ function _switchToEditor() {
4651
+ _switchToEditor = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee10(messageRow, message, channelObject, userContext) {
4652
+ var messageTable, editRow;
4653
+ return _regenerator["default"].wrap(function _callee10$(_context11) {
4654
+ while (1) switch (_context11.prev = _context11.next) {
4655
+ case 0:
4656
+ messageTable = messageRow.parentNode;
4657
+ _context11.t0 = renderMessageEditor;
4658
+ _context11.t1 = channelObject;
4659
+ _context11.t2 = messageTable;
4660
+ _context11.t3 = userContext;
4661
+ _context11.t4 = channelObject.options;
4662
+ _context11.next = 8;
4663
+ return (0, _chatLogic.mostRecentVersion)(message);
4664
+ case 8:
4665
+ _context11.t5 = _context11.sent;
4666
+ editRow = (0, _context11.t0)(_context11.t1, _context11.t2, _context11.t3, _context11.t4, _context11.t5);
4667
+ messageTable.insertBefore(editRow, messageRow);
4668
+ editRow.originalRow = messageRow;
4669
+ messageRow.style.visibility = 'hidden'; // Hide the original message. unhide if user cancels edit
4670
+ case 13:
4671
+ case "end":
4672
+ return _context11.stop();
4673
+ }
4674
+ }, _callee10);
4675
+ }));
4676
+ return _switchToEditor.apply(this, arguments);
4677
+ }
4229
4678
  function renderMessageEditor(channelObject, messageTable, userContext, options, originalMessage) {
4230
4679
  function revertEditing(messageEditor) {
4231
4680
  messageEditor.originalRow.style.visibility = 'visible'; // restore read-only version
4232
4681
  messageEditor.parentNode.removeChild(messageEditor);
4233
4682
  }
4234
- function handleFieldInput(_x) {
4683
+ function handleFieldInput(_x10) {
4235
4684
  return _handleFieldInput.apply(this, arguments);
4236
4685
  }
4237
4686
  function _handleFieldInput() {
@@ -4249,72 +4698,87 @@ function renderMessageEditor(channelObject, messageTable, userContext, options,
4249
4698
  }));
4250
4699
  return _handleFieldInput.apply(this, arguments);
4251
4700
  }
4252
- function sendMessage(_x2, _x3) {
4701
+ function sendMessage(_x11, _x12) {
4253
4702
  return _sendMessage.apply(this, arguments);
4254
4703
  } // sendMessage
4255
4704
  // DRAG AND DROP
4256
4705
  function _sendMessage() {
4257
- _sendMessage = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee6(text, fromMainField) {
4258
- var sendComplete, message, statusArea;
4259
- return _regenerator["default"].wrap(function _callee6$(_context7) {
4260
- while (1) switch (_context7.prev = _context7.next) {
4706
+ _sendMessage = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee7(text, fromMainField) {
4707
+ var sendComplete, _sendComplete, message, statusArea;
4708
+ return _regenerator["default"].wrap(function _callee7$(_context8) {
4709
+ while (1) switch (_context8.prev = _context8.next) {
4261
4710
  case 0:
4262
- sendComplete = function _sendComplete(message, _text2) {
4263
- // const dateStamp = store.any(message, ns.dct('created'), null, message.doc())
4264
- // const content = $rdf.literal(text2)
4265
- (0, _infinite.insertMessageIntoTable)(channelObject, messageTable, message, false, options, userContext); // not green
4266
-
4267
- if (originalMessage) {
4268
- // editing another message
4269
- var oldRow = messageEditor.originalRow;
4270
- // oldRow.style.display = '' // restore read-only version, re-attack
4271
- if (oldRow.parentNode) {
4272
- oldRow.parentNode.removeChild(oldRow); // No longer needed old version
4273
- } else {
4274
- debug.warn('No parentNode on old message ' + oldRow.textContent);
4275
- oldRow.style.backgroundColor = '#fee';
4276
- oldRow.style.visibility = 'hidden'; // @@ FIX THIS AND REMOVE FROM DOM INSTEAD
4277
- }
4711
+ _sendComplete = function _sendComplete3() {
4712
+ _sendComplete = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee6(message, _text2) {
4713
+ var oldRow;
4714
+ return _regenerator["default"].wrap(function _callee6$(_context7) {
4715
+ while (1) switch (_context7.prev = _context7.next) {
4716
+ case 0:
4717
+ _context7.next = 2;
4718
+ return (0, _infinite.insertMessageIntoTable)(channelObject, messageTable, message, false, options, userContext);
4719
+ case 2:
4720
+ // not green
4278
4721
 
4279
- messageEditor.parentNode.removeChild(messageEditor); // no longer need editor
4280
- } else {
4281
- if (fromMainField) {
4282
- field.value = ''; // clear from out for reuse
4283
- field.setAttribute('style', messageBodyStyle);
4284
- field.disabled = false;
4285
- field.scrollIntoView(options.newestFirst); // allign bottom (top)
4286
- field.focus(); // Start typing next line immediately
4287
- field.select();
4288
- }
4289
- }
4290
- // await channelObject.div.refresh() // Add new day if nec @@ add back
4291
- };
4722
+ if (originalMessage) {
4723
+ // editing another message
4724
+ oldRow = messageEditor.originalRow; // oldRow.style.display = '' // restore read-only version, re-attack
4725
+ if (oldRow.parentNode) {
4726
+ oldRow.parentNode.removeChild(oldRow); // No longer needed old version
4727
+ } else {
4728
+ debug.warn('No parentNode on old message ' + oldRow.textContent);
4729
+ oldRow.style.backgroundColor = '#fee';
4730
+ oldRow.style.visibility = 'hidden'; // @@ FIX THIS AND REMOVE FROM DOM INSTEAD
4731
+ }
4292
4732
 
4733
+ messageEditor.parentNode.removeChild(messageEditor); // no longer need editor
4734
+ } else {
4735
+ if (fromMainField) {
4736
+ field.value = ''; // clear from out for reuse
4737
+ field.setAttribute('style', messageBodyStyle);
4738
+ field.disabled = false;
4739
+ field.scrollIntoView(options.newestFirst); // allign bottom (top)
4740
+ field.focus(); // Start typing next line immediately
4741
+ field.select();
4742
+ }
4743
+ }
4744
+ // await channelObject.div.refresh() // Add new day if nec @@ add back
4745
+ case 3:
4746
+ case "end":
4747
+ return _context7.stop();
4748
+ }
4749
+ }, _callee6);
4750
+ }));
4751
+ return _sendComplete.apply(this, arguments);
4752
+ };
4753
+ sendComplete = function _sendComplete2(_x18, _x19) {
4754
+ return _sendComplete.apply(this, arguments);
4755
+ };
4293
4756
  // const me = authn.currentUser() // Must be logged on or wuld have got login button
4294
4757
  if (fromMainField) {
4295
4758
  field.setAttribute('style', messageBodyStyle + 'color: #bbb;'); // pendingedit
4296
4759
  field.disabled = true;
4297
4760
  }
4298
- _context7.prev = 2;
4299
- _context7.next = 5;
4300
- return channelObject.updateMessage(text, originalMessage);
4301
- case 5:
4302
- message = _context7.sent;
4303
- _context7.next = 13;
4761
+ _context8.prev = 3;
4762
+ _context8.next = 6;
4763
+ return channelObject.updateMessage(text, originalMessage, null, options.thread);
4764
+ case 6:
4765
+ message = _context8.sent;
4766
+ _context8.next = 14;
4304
4767
  break;
4305
- case 8:
4306
- _context7.prev = 8;
4307
- _context7.t0 = _context7["catch"](2);
4768
+ case 9:
4769
+ _context8.prev = 9;
4770
+ _context8.t0 = _context8["catch"](3);
4308
4771
  statusArea = userContext.statusArea || messageEditor;
4309
- statusArea.appendChild(widgets.errorMessageBlock(dom, 'Error writing message: ' + _context7.t0));
4310
- return _context7.abrupt("return");
4311
- case 13:
4312
- sendComplete(message, text);
4772
+ statusArea.appendChild(widgets.errorMessageBlock(dom, 'Error writing message: ' + _context8.t0));
4773
+ return _context8.abrupt("return");
4313
4774
  case 14:
4775
+ _context8.next = 16;
4776
+ return sendComplete(message, text);
4777
+ case 16:
4314
4778
  case "end":
4315
- return _context7.stop();
4779
+ return _context8.stop();
4316
4780
  }
4317
- }, _callee6, null, [[2, 8]]);
4781
+ }, _callee7, null, [[3, 9]]);
4318
4782
  }));
4319
4783
  return _sendMessage.apply(this, arguments);
4320
4784
  }
@@ -4333,7 +4797,7 @@ function renderMessageEditor(channelObject, messageTable, userContext, options,
4333
4797
  }
4334
4798
  }, _callee);
4335
4799
  }));
4336
- return function (_x4, _x5) {
4800
+ return function (_x13, _x14) {
4337
4801
  return _ref.apply(this, arguments);
4338
4802
  };
4339
4803
  }());
@@ -4377,7 +4841,7 @@ function renderMessageEditor(channelObject, messageTable, userContext, options,
4377
4841
  }
4378
4842
  }, _callee2, null, [[1, 11, 14, 17]]);
4379
4843
  }));
4380
- return function droppedURIHandler(_x6) {
4844
+ return function droppedURIHandler(_x15) {
4381
4845
  return _ref2.apply(this, arguments);
4382
4846
  };
4383
4847
  }();
@@ -4388,7 +4852,7 @@ function renderMessageEditor(channelObject, messageTable, userContext, options,
4388
4852
  imageDoc = $rdf.sym(chatDocument.dir().uri + 'Image_' + Date.now() + '.png');
4389
4853
  return imageDoc;
4390
4854
  }
4391
- function tookPicture(_x7) {
4855
+ function tookPicture(_x16) {
4392
4856
  return _tookPicture.apply(this, arguments);
4393
4857
  } // Body of turnOnInput
4394
4858
  function _tookPicture() {
@@ -4465,7 +4929,7 @@ function renderMessageEditor(channelObject, messageTable, userContext, options,
4465
4929
  }
4466
4930
  }, _callee3);
4467
4931
  }));
4468
- return function (_x8) {
4932
+ return function (_x17) {
4469
4933
  return _ref3.apply(this, arguments);
4470
4934
  };
4471
4935
  }(), false);
@@ -4527,7 +4991,7 @@ function renderMessageEditor(channelObject, messageTable, userContext, options,
4527
4991
  turnOnInput();
4528
4992
  Object.assign(context, userContext);
4529
4993
  (0, _bookmarks.findBookmarkDocument)(context).then(function (_context) {
4530
- // console.log('Bookmark file: ' + context.bookmarkDocument)
4994
+ // debug.log('Bookmark file: ' + context.bookmarkDocument)
4531
4995
  });
4532
4996
  });
4533
4997
  return messageEditor;
@@ -4554,8 +5018,8 @@ exports.messageToolbar = messageToolbar;
4554
5018
  exports.sentimentStrip = sentimentStrip;
4555
5019
  exports.sentimentStripLinked = sentimentStripLinked;
4556
5020
  var _regenerator = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/regenerator */ "./node_modules/@babel/runtime/regenerator/index.js"));
4557
- var _asyncToGenerator2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ "./node_modules/@babel/runtime/helpers/asyncToGenerator.js"));
4558
5021
  var _slicedToArray2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ "./node_modules/@babel/runtime/helpers/slicedToArray.js"));
5022
+ var _asyncToGenerator2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ "./node_modules/@babel/runtime/helpers/asyncToGenerator.js"));
4559
5023
  var debug = _interopRequireWildcard(__webpack_require__(/*! ../debug */ "./lib/debug.js"));
4560
5024
  var _iconBase = __webpack_require__(/*! ../iconBase */ "./lib/iconBase.js");
4561
5025
  var ns = _interopRequireWildcard(__webpack_require__(/*! ../ns */ "./lib/ns.js"));
@@ -4596,6 +5060,7 @@ var PENCIL_ICON = 'noun_253504.svg'; // edit a message
4596
5060
  // const SPANNER_ICON = 'noun_344563.svg' -> settings
4597
5061
  var THUMBS_UP_ICON = 'noun_1384132.svg';
4598
5062
  var THUMBS_DOWN_ICON = 'noun_1384135.svg';
5063
+ var REPLY_ICON = 'noun-reply-5506924.svg';
4599
5064
  /**
4600
5065
  * Emoji in Unicode
4601
5066
  */
@@ -4608,18 +5073,8 @@ emoji[ns.schema('LikeAction')] = '❤️';
4608
5073
  /**
4609
5074
  * Create strip of sentiments expressed
4610
5075
  */
4611
- function sentimentStrip(target, doc) {
4612
- // alain seems not used
4613
- var latest = (0, _chatLogic.mostRecentVersion)(target);
4614
- var actions = _solidLogic.store.holds(latest, ns.schema('dateDeleted').value, null, latest.doc()) ? _solidLogic.store.each(null, ns.schema('target'), target, doc) : [];
4615
- var sentiments = actions.map(function (a) {
4616
- return _solidLogic.store.any(a, ns.rdf('type'), null, doc);
4617
- });
4618
- sentiments.sort();
4619
- var strings = sentiments.map(function (x) {
4620
- return emoji[x] || '';
4621
- });
4622
- return dom.createTextNode(strings.join(' '));
5076
+ function sentimentStrip(_x, _x2) {
5077
+ return _sentimentStrip.apply(this, arguments);
4623
5078
  }
4624
5079
  /**
4625
5080
  * Create strip of sentiments expressed, with hyperlinks
@@ -4627,276 +5082,437 @@ function sentimentStrip(target, doc) {
4627
5082
  * @param target {NamedNode} - The thing about which they are expressed
4628
5083
  * @param doc {NamedNode} - The document in which they are expressed
4629
5084
  */
4630
- function sentimentStripLinked(target, doc) {
4631
- var strip = dom.createElement('span');
4632
- function refresh() {
4633
- strip.innerHTML = '';
4634
- var actions = (0, _chatLogic.mostRecentVersion)(target).uri !== ns.schema('dateDeleted').uri ? _solidLogic.store.each(null, ns.schema('target'), target, doc) : [];
4635
- var sentiments = actions.map(function (a) {
4636
- return [_solidLogic.store.any(a, ns.rdf('type'), null, doc), _solidLogic.store.any(a, ns.schema('agent'), null, doc)];
4637
- });
4638
- sentiments.sort();
4639
- sentiments.forEach(function (ss) {
4640
- var _ss = (0, _slicedToArray2["default"])(ss, 2),
4641
- theClass = _ss[0],
4642
- agent = _ss[1];
4643
- var res;
4644
- if (agent) {
4645
- res = dom.createElement('a');
4646
- res.setAttribute('href', agent.uri);
4647
- } else {
4648
- res = dom.createTextNode('');
5085
+ function _sentimentStrip() {
5086
+ _sentimentStrip = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(target, doc) {
5087
+ var latest, actions, sentiments, strings;
5088
+ return _regenerator["default"].wrap(function _callee$(_context) {
5089
+ while (1) switch (_context.prev = _context.next) {
5090
+ case 0:
5091
+ _context.next = 2;
5092
+ return (0, _chatLogic.mostRecentVersion)(target);
5093
+ case 2:
5094
+ latest = _context.sent;
5095
+ actions = _solidLogic.store.holds(latest, ns.schema('dateDeleted').value, null, latest.doc()) ? _solidLogic.store.each(null, ns.schema('target'), target, doc) : [];
5096
+ sentiments = actions.map(function (a) {
5097
+ return _solidLogic.store.any(a, ns.rdf('type'), null, doc);
5098
+ });
5099
+ sentiments.sort();
5100
+ strings = sentiments.map(function (x) {
5101
+ return emoji[x] || '';
5102
+ });
5103
+ return _context.abrupt("return", dom.createTextNode(strings.join(' ')));
5104
+ case 8:
5105
+ case "end":
5106
+ return _context.stop();
4649
5107
  }
4650
- res.textContent = emoji[theClass] || '*';
4651
- strip.appendChild(res);
4652
- });
4653
- }
4654
- refresh();
4655
- strip.refresh = refresh;
4656
- return strip;
5108
+ }, _callee);
5109
+ }));
5110
+ return _sentimentStrip.apply(this, arguments);
5111
+ }
5112
+ function sentimentStripLinked(_x3, _x4) {
5113
+ return _sentimentStripLinked.apply(this, arguments);
4657
5114
  }
4658
5115
  /**
4659
5116
  * Creates a message toolbar component
4660
5117
  */
4661
- function messageToolbar(message, messageRow, userContext, channelObject) {
4662
- function deleteMessage() {
4663
- return _deleteMessage.apply(this, arguments);
4664
- }
4665
- function _deleteMessage() {
4666
- _deleteMessage = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2() {
4667
- var author, msg, area;
4668
- return _regenerator["default"].wrap(function _callee2$(_context2) {
4669
- while (1) switch (_context2.prev = _context2.next) {
4670
- case 0:
4671
- author = _solidLogic.store.any(message, ns.foaf('maker'));
4672
- if (me) {
4673
- _context2.next = 5;
4674
- break;
5118
+ function _sentimentStripLinked() {
5119
+ _sentimentStripLinked = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3(target, doc) {
5120
+ var strip, refresh, _refresh;
5121
+ return _regenerator["default"].wrap(function _callee3$(_context3) {
5122
+ while (1) switch (_context3.prev = _context3.next) {
5123
+ case 0:
5124
+ _refresh = function _refresh3() {
5125
+ _refresh = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2() {
5126
+ var actions, sentiments;
5127
+ return _regenerator["default"].wrap(function _callee2$(_context2) {
5128
+ while (1) switch (_context2.prev = _context2.next) {
5129
+ case 0:
5130
+ strip.innerHTML = '';
5131
+ _context2.next = 3;
5132
+ return (0, _chatLogic.mostRecentVersion)(target).uri;
5133
+ case 3:
5134
+ _context2.t0 = _context2.sent;
5135
+ _context2.t1 = ns.schema('dateDeleted').uri;
5136
+ if (!(_context2.t0 !== _context2.t1)) {
5137
+ _context2.next = 9;
5138
+ break;
5139
+ }
5140
+ _context2.t2 = _solidLogic.store.each(null, ns.schema('target'), target, doc);
5141
+ _context2.next = 10;
5142
+ break;
5143
+ case 9:
5144
+ _context2.t2 = [];
5145
+ case 10:
5146
+ actions = _context2.t2;
5147
+ sentiments = actions.map(function (a) {
5148
+ return [_solidLogic.store.any(a, ns.rdf('type'), null, doc), _solidLogic.store.any(a, ns.schema('agent'), null, doc)];
5149
+ });
5150
+ sentiments.sort();
5151
+ sentiments.forEach(function (ss) {
5152
+ var _ss = (0, _slicedToArray2["default"])(ss, 2),
5153
+ theClass = _ss[0],
5154
+ agent = _ss[1];
5155
+ var res;
5156
+ if (agent) {
5157
+ res = dom.createElement('a');
5158
+ res.setAttribute('href', agent.uri);
5159
+ } else {
5160
+ res = dom.createTextNode('');
5161
+ }
5162
+ res.textContent = emoji[theClass] || '*';
5163
+ strip.appendChild(res);
5164
+ });
5165
+ case 14:
5166
+ case "end":
5167
+ return _context2.stop();
5168
+ }
5169
+ }, _callee2);
5170
+ }));
5171
+ return _refresh.apply(this, arguments);
5172
+ };
5173
+ refresh = function _refresh2() {
5174
+ return _refresh.apply(this, arguments);
5175
+ };
5176
+ strip = dom.createElement('span');
5177
+ refresh().then(debug.log('sentimentStripLinked async refreshed'));
5178
+ strip.refresh = refresh;
5179
+ return _context3.abrupt("return", strip);
5180
+ case 6:
5181
+ case "end":
5182
+ return _context3.stop();
5183
+ }
5184
+ }, _callee3);
5185
+ }));
5186
+ return _sentimentStripLinked.apply(this, arguments);
5187
+ }
5188
+ function messageToolbar(_x5, _x6, _x7, _x8) {
5189
+ return _messageToolbar.apply(this, arguments);
5190
+ }
5191
+ function _messageToolbar() {
5192
+ _messageToolbar = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee10(message, messageRow, userContext, channelObject) {
5193
+ var deleteMessage, _deleteMessage, editMessage, _editMessage, replyInThread, _replyInThread, div, closeToolbar, deleteThingThen, _deleteThingThen, me, sentimentButton, context1, cancelButton;
5194
+ return _regenerator["default"].wrap(function _callee10$(_context10) {
5195
+ while (1) switch (_context10.prev = _context10.next) {
5196
+ case 0:
5197
+ sentimentButton = function _sentimentButton(context, target, icon, actionClass, doc, mutuallyExclusive) {
5198
+ function setColor() {
5199
+ button.style.backgroundColor = action ? 'yellow' : 'white';
4675
5200
  }
4676
- alert('You can\'t delete the message, you are not logged in.');
4677
- _context2.next = 22;
4678
- break;
4679
- case 5:
4680
- if (!me.sameTerm(author)) {
4681
- _context2.next = 21;
4682
- break;
5201
+ var button = widgets.button(dom, icon, utils.label(actionClass), /*#__PURE__*/function () {
5202
+ var _ref = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4(_event) {
5203
+ var insertMe, dirty, i, a;
5204
+ return _regenerator["default"].wrap(function _callee4$(_context4) {
5205
+ while (1) switch (_context4.prev = _context4.next) {
5206
+ case 0:
5207
+ if (!action) {
5208
+ _context4.next = 7;
5209
+ break;
5210
+ }
5211
+ _context4.next = 3;
5212
+ return deleteThingThen(action);
5213
+ case 3:
5214
+ action = null;
5215
+ setColor();
5216
+ _context4.next = 25;
5217
+ break;
5218
+ case 7:
5219
+ // no action
5220
+ action = widgets.newThing(doc);
5221
+ insertMe = [rdf.st(action, ns.schema('agent'), context.me, doc), rdf.st(action, ns.rdf('type'), actionClass, doc), rdf.st(action, ns.schema('target'), target, doc)];
5222
+ _context4.next = 11;
5223
+ return _solidLogic.store.updater.update([], insertMe);
5224
+ case 11:
5225
+ setColor();
5226
+ if (!mutuallyExclusive) {
5227
+ _context4.next = 25;
5228
+ break;
5229
+ }
5230
+ // Delete incompative sentiments
5231
+ dirty = false;
5232
+ i = 0;
5233
+ case 15:
5234
+ if (!(i < mutuallyExclusive.length)) {
5235
+ _context4.next = 24;
5236
+ break;
5237
+ }
5238
+ a = existingAction(mutuallyExclusive[i]);
5239
+ if (!a) {
5240
+ _context4.next = 21;
5241
+ break;
5242
+ }
5243
+ _context4.next = 20;
5244
+ return deleteThingThen(a);
5245
+ case 20:
5246
+ // but how refresh? refreshTree the parent?
5247
+ dirty = true;
5248
+ case 21:
5249
+ i++;
5250
+ _context4.next = 15;
5251
+ break;
5252
+ case 24:
5253
+ if (dirty) {
5254
+ // widgets.refreshTree(button.parentNode) // requires them all to be immediate siblings
5255
+ widgets.refreshTree(messageRow); // requires them all to be immediate siblings
5256
+ }
5257
+ case 25:
5258
+ case "end":
5259
+ return _context4.stop();
5260
+ }
5261
+ }, _callee4);
5262
+ }));
5263
+ return function (_x11) {
5264
+ return _ref.apply(this, arguments);
5265
+ };
5266
+ }());
5267
+ function existingAction(actionClass) {
5268
+ var actions = _solidLogic.store.each(null, ns.schema('agent'), context.me, doc).filter(function (x) {
5269
+ return _solidLogic.store.holds(x, ns.rdf('type'), actionClass, doc);
5270
+ }).filter(function (x) {
5271
+ return _solidLogic.store.holds(x, ns.schema('target'), target, doc);
5272
+ });
5273
+ return actions.length ? actions[0] : null;
4683
5274
  }
4684
- _context2.prev = 6;
4685
- _context2.next = 9;
4686
- return channelObject.deleteMessage(message);
4687
- case 9:
4688
- _context2.next = 18;
4689
- break;
4690
- case 11:
4691
- _context2.prev = 11;
4692
- _context2.t0 = _context2["catch"](6);
4693
- msg = 'Error deleting messaage ' + _context2.t0;
4694
- debug.warn(msg);
4695
- alert(msg);
4696
- area = userContext.statusArea || messageRow.parentNode;
4697
- area.appendChild(widgets.errorMessageBlock(dom, msg));
4698
- case 18:
4699
- messageRow.parentNode.removeChild(messageRow);
4700
- _context2.next = 22;
4701
- break;
4702
- case 21:
4703
- alert('You can\'t delete the message, you are not logged in as the author, ' + author);
4704
- case 22:
4705
- closeToolbar();
4706
- case 23:
4707
- case "end":
4708
- return _context2.stop();
4709
- }
4710
- }, _callee2, null, [[6, 11]]);
4711
- }));
4712
- return _deleteMessage.apply(this, arguments);
4713
- }
4714
- function editMessage(_x) {
4715
- return _editMessage.apply(this, arguments);
4716
- } // alain TODO allow chat owner to fully delete message + sentiments and replacing messages
4717
- function _editMessage() {
4718
- _editMessage = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3(messageRow) {
4719
- return _regenerator["default"].wrap(function _callee3$(_context3) {
4720
- while (1) switch (_context3.prev = _context3.next) {
4721
- case 0:
4722
- if (me.value === _solidLogic.store.any(message, ns.foaf('maker')).value) {
4723
- closeToolbar(); // edit is a one-off action
4724
- (0, _message.switchToEditor)(messageRow, message, channelObject, userContext);
5275
+ function refresh() {
5276
+ action = existingAction(actionClass);
5277
+ setColor();
4725
5278
  }
4726
- case 1:
4727
- case "end":
4728
- return _context3.stop();
4729
- }
4730
- }, _callee3);
4731
- }));
4732
- return _editMessage.apply(this, arguments);
4733
- }
4734
- var div = dom.createElement('div');
4735
- // is message deleted ?
4736
- if ((0, _chatLogic.mostRecentVersion)(message).value === ns.schema('dateDeleted').value) return div;
4737
- function closeToolbar() {
4738
- div.parentElement.parentElement.removeChild(div.parentElement); // remive the TR
4739
- }
4740
- function deleteThingThen(_x2) {
4741
- return _deleteThingThen.apply(this, arguments);
4742
- } // Things only the original author can do
4743
- function _deleteThingThen() {
4744
- _deleteThingThen = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4(x) {
4745
- return _regenerator["default"].wrap(function _callee4$(_context4) {
4746
- while (1) switch (_context4.prev = _context4.next) {
4747
- case 0:
4748
- _context4.next = 2;
4749
- return _solidLogic.store.updater.update(_solidLogic.store.connectedStatements(x), []);
4750
- case 2:
4751
- case "end":
4752
- return _context4.stop();
4753
- }
4754
- }, _callee4);
4755
- }));
4756
- return _deleteThingThen.apply(this, arguments);
4757
- }
4758
- var me = _solidLogic.authn.currentUser(); // If already logged on
4759
- if (me && _solidLogic.store.holds(message, ns.foaf('maker'), me)) {
4760
- // button to delete the message
4761
- div.appendChild(widgets.deleteButtonWithCheck(dom, div, 'message', deleteMessage));
4762
- // button to edit the message
4763
- div.appendChild(widgets.button(dom, _iconBase.icons.iconBase + PENCIL_ICON, 'edit', function () {
4764
- return editMessage(messageRow);
4765
- }));
4766
- } // if mine
4767
- // Things anyone can do if they have a bookmark list async
4768
- /*
4769
- var bookmarkButton = await bookmarks.renderBookmarksButton(userContext)
4770
- if (bookmarkButton) {
4771
- div.appendChild(bookmarkButton)
4772
- }
4773
- */
4774
- // Things anyone can do if they have a bookmark list
5279
+ var action;
5280
+ button.refresh = refresh; // If the file changes, refresh live
5281
+ refresh();
5282
+ return button;
5283
+ };
5284
+ _deleteThingThen = function _deleteThingThen3() {
5285
+ _deleteThingThen = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee9(x) {
5286
+ return _regenerator["default"].wrap(function _callee9$(_context9) {
5287
+ while (1) switch (_context9.prev = _context9.next) {
5288
+ case 0:
5289
+ _context9.next = 2;
5290
+ return _solidLogic.store.updater.update(_solidLogic.store.connectedStatements(x), []);
5291
+ case 2:
5292
+ case "end":
5293
+ return _context9.stop();
5294
+ }
5295
+ }, _callee9);
5296
+ }));
5297
+ return _deleteThingThen.apply(this, arguments);
5298
+ };
5299
+ deleteThingThen = function _deleteThingThen2(_x10) {
5300
+ return _deleteThingThen.apply(this, arguments);
5301
+ };
5302
+ closeToolbar = function _closeToolbar() {
5303
+ div.parentElement.parentElement.removeChild(div.parentElement); // remive the TR
5304
+ };
5305
+ _replyInThread = function _replyInThread3() {
5306
+ _replyInThread = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee8() {
5307
+ var thread, options;
5308
+ return _regenerator["default"].wrap(function _callee8$(_context8) {
5309
+ while (1) switch (_context8.prev = _context8.next) {
5310
+ case 0:
5311
+ _context8.next = 2;
5312
+ return channelObject.createThread(message);
5313
+ case 2:
5314
+ thread = _context8.sent;
5315
+ options = userContext.chatOptions;
5316
+ if (options) {
5317
+ _context8.next = 6;
5318
+ break;
5319
+ }
5320
+ throw new Error('replyInThread: missing options');
5321
+ case 6:
5322
+ options.showThread(thread, options);
5323
+ closeToolbar(); // a one-off action
5324
+ case 8:
5325
+ case "end":
5326
+ return _context8.stop();
5327
+ }
5328
+ }, _callee8);
5329
+ }));
5330
+ return _replyInThread.apply(this, arguments);
5331
+ };
5332
+ replyInThread = function _replyInThread2() {
5333
+ return _replyInThread.apply(this, arguments);
5334
+ };
5335
+ _editMessage = function _editMessage3() {
5336
+ _editMessage = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee7(messageRow) {
5337
+ return _regenerator["default"].wrap(function _callee7$(_context7) {
5338
+ while (1) switch (_context7.prev = _context7.next) {
5339
+ case 0:
5340
+ if (!(me.value === _solidLogic.store.any(message, ns.foaf('maker')).value)) {
5341
+ _context7.next = 4;
5342
+ break;
5343
+ }
5344
+ closeToolbar(); // edit is a one-off action
5345
+ _context7.next = 4;
5346
+ return (0, _message.switchToEditor)(messageRow, message, channelObject, userContext);
5347
+ case 4:
5348
+ case "end":
5349
+ return _context7.stop();
5350
+ }
5351
+ }, _callee7);
5352
+ }));
5353
+ return _editMessage.apply(this, arguments);
5354
+ };
5355
+ editMessage = function _editMessage2(_x9) {
5356
+ return _editMessage.apply(this, arguments);
5357
+ };
5358
+ _deleteMessage = function _deleteMessage3() {
5359
+ _deleteMessage = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee6() {
5360
+ var author, msg, area;
5361
+ return _regenerator["default"].wrap(function _callee6$(_context6) {
5362
+ while (1) switch (_context6.prev = _context6.next) {
5363
+ case 0:
5364
+ author = _solidLogic.store.any(message, ns.foaf('maker'));
5365
+ if (me) {
5366
+ _context6.next = 5;
5367
+ break;
5368
+ }
5369
+ alert('You can\'t delete the message, you are not logged in.');
5370
+ _context6.next = 22;
5371
+ break;
5372
+ case 5:
5373
+ if (!me.sameTerm(author)) {
5374
+ _context6.next = 21;
5375
+ break;
5376
+ }
5377
+ _context6.prev = 6;
5378
+ _context6.next = 9;
5379
+ return channelObject.deleteMessage(message);
5380
+ case 9:
5381
+ _context6.next = 18;
5382
+ break;
5383
+ case 11:
5384
+ _context6.prev = 11;
5385
+ _context6.t0 = _context6["catch"](6);
5386
+ msg = 'Error deleting messaage ' + _context6.t0;
5387
+ debug.warn(msg);
5388
+ alert(msg);
5389
+ area = userContext.statusArea || messageRow.parentNode;
5390
+ area.appendChild(widgets.errorMessageBlock(dom, msg));
5391
+ case 18:
5392
+ messageRow.parentNode.removeChild(messageRow);
5393
+ _context6.next = 22;
5394
+ break;
5395
+ case 21:
5396
+ alert('You can\'t delete the message, you are not logged in as the author, ' + author);
5397
+ case 22:
5398
+ closeToolbar();
5399
+ case 23:
5400
+ case "end":
5401
+ return _context6.stop();
5402
+ }
5403
+ }, _callee6, null, [[6, 11]]);
5404
+ }));
5405
+ return _deleteMessage.apply(this, arguments);
5406
+ };
5407
+ deleteMessage = function _deleteMessage2() {
5408
+ return _deleteMessage.apply(this, arguments);
5409
+ };
5410
+ // alain: TODO allow chat owner to fully delete message + sentiments and replacing messages
5411
+ div = dom.createElement('div'); // is message deleted ?
5412
+ _context10.next = 13;
5413
+ return (0, _chatLogic.mostRecentVersion)(message).value;
5414
+ case 13:
5415
+ _context10.t0 = _context10.sent;
5416
+ _context10.t1 = ns.schema('dateDeleted').value;
5417
+ if (!(_context10.t0 === _context10.t1)) {
5418
+ _context10.next = 17;
5419
+ break;
5420
+ }
5421
+ return _context10.abrupt("return", div);
5422
+ case 17:
5423
+ // Things only the original author can do
5424
+ me = _solidLogic.authn.currentUser(); // If already logged on
5425
+ if (me && _solidLogic.store.holds(message, ns.foaf('maker'), me)) {
5426
+ // button to delete the message
5427
+ div.appendChild(widgets.deleteButtonWithCheck(dom, div, 'message', deleteMessage));
5428
+ // button to edit the message
5429
+ div.appendChild(widgets.button(dom, _iconBase.icons.iconBase + PENCIL_ICON, 'edit', function () {
5430
+ return editMessage(messageRow);
5431
+ }));
5432
+ } // if mine
5433
+ // Things anyone can do if they have a bookmark list async
5434
+ /*
5435
+ var bookmarkButton = await bookmarks.renderBookmarksButton(userContext)
5436
+ if (bookmarkButton) {
5437
+ div.appendChild(bookmarkButton)
5438
+ }
5439
+ */
5440
+ // Things anyone can do if they have a bookmark list
4775
5441
 
4776
- (0, _bookmarks.renderBookmarksButton)(userContext).then(function (bookmarkButton) {
4777
- if (bookmarkButton) div.appendChild(bookmarkButton);
4778
- });
5442
+ (0, _bookmarks.renderBookmarksButton)(userContext).then(function (bookmarkButton) {
5443
+ if (bookmarkButton) div.appendChild(bookmarkButton);
5444
+ });
4779
5445
 
4780
- /** Button to allow user to express a sentiment (like, endorse, etc) about a target
4781
- *
4782
- * @param context {Object} - Provide dom and me
4783
- * @param target {NamedNode} - The thing the user expresses an opnion about
4784
- * @param icon {uristring} - The icon to be used for the button
4785
- * @param actionClass {NamedNode} - The RDF class - typically a subclass of schema:Action
4786
- * @param doc - {NamedNode} - the Solid document iunto which the data should be written
4787
- * @param mutuallyExclusive {Array<NamedNode>} - Any RDF classes of sentimentswhich are mutiually exclusive
4788
- */
4789
- function sentimentButton(context, target, icon, actionClass, doc, mutuallyExclusive) {
4790
- function setColor() {
4791
- button.style.backgroundColor = action ? 'yellow' : 'white';
4792
- }
4793
- var button = widgets.button(dom, icon, utils.label(actionClass), /*#__PURE__*/function () {
4794
- var _ref = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(_event) {
4795
- var insertMe, dirty, i, a;
4796
- return _regenerator["default"].wrap(function _callee$(_context) {
4797
- while (1) switch (_context.prev = _context.next) {
4798
- case 0:
4799
- if (!action) {
4800
- _context.next = 7;
4801
- break;
4802
- }
4803
- _context.next = 3;
4804
- return deleteThingThen(action);
4805
- case 3:
4806
- action = null;
4807
- setColor();
4808
- _context.next = 25;
4809
- break;
4810
- case 7:
4811
- // no action
4812
- action = widgets.newThing(doc);
4813
- insertMe = [rdf.st(action, ns.schema('agent'), context.me, doc), rdf.st(action, ns.rdf('type'), actionClass, doc), rdf.st(action, ns.schema('target'), target, doc)];
4814
- _context.next = 11;
4815
- return _solidLogic.store.updater.update([], insertMe);
4816
- case 11:
4817
- setColor();
4818
- if (!mutuallyExclusive) {
4819
- _context.next = 25;
4820
- break;
4821
- }
4822
- // Delete incompative sentiments
4823
- dirty = false;
4824
- i = 0;
4825
- case 15:
4826
- if (!(i < mutuallyExclusive.length)) {
4827
- _context.next = 24;
4828
- break;
4829
- }
4830
- a = existingAction(mutuallyExclusive[i]);
4831
- if (!a) {
4832
- _context.next = 21;
4833
- break;
4834
- }
4835
- _context.next = 20;
4836
- return deleteThingThen(a);
4837
- case 20:
4838
- // but how refresh? refreshTree the parent?
4839
- dirty = true;
4840
- case 21:
4841
- i++;
4842
- _context.next = 15;
4843
- break;
4844
- case 24:
4845
- if (dirty) {
4846
- // widgets.refreshTree(button.parentNode) // requires them all to be immediate siblings
4847
- widgets.refreshTree(messageRow); // requires them all to be immediate siblings
4848
- }
4849
- case 25:
4850
- case "end":
4851
- return _context.stop();
5446
+ /** Button to allow user to express a sentiment (like, endorse, etc) about a target
5447
+ *
5448
+ * @param context {Object} - Provide dom and me
5449
+ * @param target {NamedNode} - The thing the user expresses an opnion about
5450
+ * @param icon {uristring} - The icon to be used for the button
5451
+ * @param actionClass {NamedNode} - The RDF class - typically a subclass of schema:Action
5452
+ * @param doc - {NamedNode} - the Solid document iunto which the data should be written
5453
+ * @param mutuallyExclusive {Array<NamedNode>} - Any RDF classes of sentimentswhich are mutiually exclusive
5454
+ */
5455
+
5456
+ // THUMBS_UP_ICON
5457
+ // https://schema.org/AgreeAction
5458
+ me = _solidLogic.authn.currentUser(); // If already logged on
5459
+ _context10.t2 = me;
5460
+ if (!_context10.t2) {
5461
+ _context10.next = 28;
5462
+ break;
4852
5463
  }
4853
- }, _callee);
4854
- }));
4855
- return function (_x3) {
4856
- return _ref.apply(this, arguments);
4857
- };
4858
- }());
4859
- function existingAction(actionClass) {
4860
- var actions = _solidLogic.store.each(null, ns.schema('agent'), context.me, doc).filter(function (x) {
4861
- return _solidLogic.store.holds(x, ns.rdf('type'), actionClass, doc);
4862
- }).filter(function (x) {
4863
- return _solidLogic.store.holds(x, ns.schema('target'), target, doc);
4864
- });
4865
- return actions.length ? actions[0] : null;
4866
- }
4867
- function refresh() {
4868
- action = existingAction(actionClass);
4869
- setColor();
4870
- }
4871
- var action;
4872
- button.refresh = refresh; // If the file changes, refresh live
4873
- refresh();
4874
- return button;
4875
- }
4876
-
4877
- // THUMBS_UP_ICON
4878
- // https://schema.org/AgreeAction
4879
- me = _solidLogic.authn.currentUser(); // If already logged on
4880
- // debug.log('Actions 3' + mostRecentVersion(message).value + ' ' + ns.schema('dateDeleted').value + ' ' + (mostRecentVersion(message).value !== ns.schema('dateDeleted').value))
5464
+ _context10.next = 25;
5465
+ return (0, _chatLogic.mostRecentVersion)(message).value;
5466
+ case 25:
5467
+ _context10.t3 = _context10.sent;
5468
+ _context10.t4 = ns.schema('dateDeleted').value;
5469
+ _context10.t2 = _context10.t3 !== _context10.t4;
5470
+ case 28:
5471
+ if (!_context10.t2) {
5472
+ _context10.next = 32;
5473
+ break;
5474
+ }
5475
+ context1 = {
5476
+ me: me,
5477
+ dom: dom,
5478
+ div: div
5479
+ };
5480
+ div.appendChild(sentimentButton(context1, message,
5481
+ // @@ TODO use widgets.sentimentButton
5482
+ _iconBase.icons.iconBase + THUMBS_UP_ICON, ns.schema('AgreeAction'), message.doc(), [ns.schema('DisagreeAction')]));
5483
+ // Thumbs down
5484
+ div.appendChild(sentimentButton(context1, message, _iconBase.icons.iconBase + THUMBS_DOWN_ICON, ns.schema('DisagreeAction'), message.doc(), [ns.schema('AgreeAction')]));
5485
+ case 32:
5486
+ // Reply buttton
4881
5487
 
4882
- if (me && (0, _chatLogic.mostRecentVersion)(message).value !== ns.schema('dateDeleted').value) {
4883
- var context1 = {
4884
- me: me,
4885
- dom: dom,
4886
- div: div
4887
- };
4888
- div.appendChild(sentimentButton(context1, message,
4889
- // @@ TODO use widgets.sentimentButton
4890
- _iconBase.icons.iconBase + THUMBS_UP_ICON, ns.schema('AgreeAction'), message.doc(), [ns.schema('DisagreeAction')]));
4891
- // Thumbs down
4892
- div.appendChild(sentimentButton(context1, message, _iconBase.icons.iconBase + THUMBS_DOWN_ICON, ns.schema('DisagreeAction'), message.doc(), [ns.schema('AgreeAction')]));
4893
- }
4894
- // X button to remove the tool UI itself
4895
- var cancelButton = div.appendChild(widgets.cancelButton(dom));
4896
- cancelButton.style["float"] = 'right';
4897
- cancelButton.firstChild.style.opacity = '0.3';
4898
- cancelButton.addEventListener('click', closeToolbar);
4899
- return div;
5488
+ if (_solidLogic.store.any(message, ns.dct('created'))) {
5489
+ // Looks like a messsage? Bar can be used for other things
5490
+ div.appendChild(widgets.button(dom, _iconBase.icons.iconBase + REPLY_ICON, 'Reply in thread', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee5() {
5491
+ return _regenerator["default"].wrap(function _callee5$(_context5) {
5492
+ while (1) switch (_context5.prev = _context5.next) {
5493
+ case 0:
5494
+ _context5.next = 2;
5495
+ return replyInThread();
5496
+ case 2:
5497
+ case "end":
5498
+ return _context5.stop();
5499
+ }
5500
+ }, _callee5);
5501
+ }))));
5502
+ }
5503
+ // X button to remove the tool UI itself
5504
+ cancelButton = div.appendChild(widgets.cancelButton(dom));
5505
+ cancelButton.style["float"] = 'right';
5506
+ cancelButton.firstChild.style.opacity = '0.3';
5507
+ cancelButton.addEventListener('click', closeToolbar);
5508
+ return _context10.abrupt("return", div);
5509
+ case 38:
5510
+ case "end":
5511
+ return _context10.stop();
5512
+ }
5513
+ }, _callee10);
5514
+ }));
5515
+ return _messageToolbar.apply(this, arguments);
4900
5516
  }
4901
5517
  //# sourceMappingURL=messageTools.js.map
4902
5518
 
@@ -13119,10 +13735,10 @@ Object.defineProperty(exports, "__esModule", ({
13119
13735
  }));
13120
13736
  exports.versionInfo = void 0;
13121
13737
  var versionInfo = {
13122
- buildTime: '2023-02-28T16:24:57Z',
13123
- commit: 'f19ac1bc672bcd96a6cad46a7101d3761036bd19',
13738
+ buildTime: '2023-03-09T18:20:37Z',
13739
+ commit: '029ae1f959316f7b8e6b4b4bef82bce7f0d8e438',
13124
13740
  npmInfo: {
13125
- 'solid-ui': '2.4.25',
13741
+ 'solid-ui': '2.4.26',
13126
13742
  npm: '8.19.4',
13127
13743
  node: '16.19.1',
13128
13744
  v8: '9.4.146.26-node.24',