solid-ui 2.4.27-92bc931a → 2.4.27-96e84cf1

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.
Files changed (64) hide show
  1. package/dist/805.solid-ui.min.js +1 -1
  2. package/dist/805.solid-ui.min.js.map +1 -1
  3. package/dist/solid-ui.js +5500 -2799
  4. package/dist/solid-ui.js.map +1 -1
  5. package/dist/solid-ui.min.js +1 -1
  6. package/dist/solid-ui.min.js.LICENSE.txt +4 -0
  7. package/dist/solid-ui.min.js.map +1 -1
  8. package/dist/vendors-node_modules_jsonld_lib_jsonld_js.solid-ui.js +1955 -1955
  9. package/dist/vendors-node_modules_jsonld_lib_jsonld_js.solid-ui.js.map +1 -1
  10. package/lib/chat/bookmarks.js +7 -6
  11. package/lib/chat/bookmarks.js.map +1 -1
  12. package/lib/chat/chatLogic.js +103 -248
  13. package/lib/chat/chatLogic.js.map +1 -1
  14. package/lib/chat/dateFolder.js +126 -129
  15. package/lib/chat/dateFolder.js.map +1 -1
  16. package/lib/chat/infinite.js +423 -633
  17. package/lib/chat/infinite.js.map +1 -1
  18. package/lib/chat/keys.d.ts +5 -0
  19. package/lib/chat/keys.d.ts.map +1 -0
  20. package/lib/chat/keys.js +125 -0
  21. package/lib/chat/keys.js.map +1 -0
  22. package/lib/chat/message.js +187 -290
  23. package/lib/chat/message.js.map +1 -1
  24. package/lib/chat/messageTools.js +277 -463
  25. package/lib/chat/messageTools.js.map +1 -1
  26. package/lib/chat/signature.d.ts +27 -0
  27. package/lib/chat/signature.d.ts.map +1 -0
  28. package/lib/chat/signature.js +110 -0
  29. package/lib/chat/signature.js.map +1 -0
  30. package/lib/chat/thread.js +144 -166
  31. package/lib/chat/thread.js.map +1 -1
  32. package/lib/header/index.js +0 -5
  33. package/lib/header/index.js.map +1 -1
  34. package/lib/log.js +5 -5
  35. package/lib/log.js.map +1 -1
  36. package/lib/login/login.js +1 -24
  37. package/lib/login/login.js.map +1 -1
  38. package/lib/pad.js +1 -4
  39. package/lib/pad.js.map +1 -1
  40. package/lib/participation.js +1 -2
  41. package/lib/participation.js.map +1 -1
  42. package/lib/preferences.js +0 -4
  43. package/lib/preferences.js.map +1 -1
  44. package/lib/utils/cryptoKeyHelpers.d.ts +5 -0
  45. package/lib/utils/cryptoKeyHelpers.d.ts.map +1 -0
  46. package/lib/utils/cryptoKeyHelpers.js +132 -0
  47. package/lib/utils/cryptoKeyHelpers.js.map +1 -0
  48. package/lib/utils/headerFooterHelpers.js +0 -2
  49. package/lib/utils/headerFooterHelpers.js.map +1 -1
  50. package/lib/versionInfo.js +2 -2
  51. package/lib/versionInfo.js.map +1 -1
  52. package/lib/widgets/buttons.js +2 -0
  53. package/lib/widgets/buttons.js.map +1 -1
  54. package/lib/widgets/forms/autocomplete/autocompleteBar.js +1 -8
  55. package/lib/widgets/forms/autocomplete/autocompleteBar.js.map +1 -1
  56. package/lib/widgets/forms/autocomplete/autocompletePicker.js +3 -8
  57. package/lib/widgets/forms/autocomplete/autocompletePicker.js.map +1 -1
  58. package/lib/widgets/forms/autocomplete/language.js +0 -5
  59. package/lib/widgets/forms/autocomplete/language.js.map +1 -1
  60. package/lib/widgets/forms.js +1 -4
  61. package/lib/widgets/forms.js.map +1 -1
  62. package/lib/widgets/peoplePicker.js +0 -11
  63. package/lib/widgets/peoplePicker.js.map +1 -1
  64. package/package.json +5 -3
@@ -12,7 +12,6 @@ exports.renderMessageEditor = renderMessageEditor;
12
12
  exports.renderMessageRow = renderMessageRow;
13
13
  exports.switchToEditor = switchToEditor;
14
14
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
15
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
16
15
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
17
16
  var _infinite = require("./infinite");
18
17
  var _messageTools = require("./messageTools");
@@ -28,16 +27,13 @@ var pad = _interopRequireWildcard(require("../pad"));
28
27
  var style = _interopRequireWildcard(require("../style"));
29
28
  var utils = _interopRequireWildcard(require("../utils"));
30
29
  var widgets = _interopRequireWildcard(require("../widgets"));
30
+ var _signature = require("./signature");
31
+ var _keys = require("./keys");
31
32
  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); }
32
33
  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; }
33
- 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; }
34
- 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; }
35
- 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; } } }; }
34
+ 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; } } }; }
36
35
  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); }
37
- 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; } /** UI code for individual messages: display them, edit them
38
- *
39
- * @packageDocumentation
40
- */ /* global $rdf */
36
+ 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; }
41
37
  var dom = window.document;
42
38
  var messageBodyStyle = style.messageBodyStyle;
43
39
  var label = utils.label;
@@ -114,232 +110,147 @@ function creatorAndDateHorizontal(td1, creator, date, message) {
114
110
  /**
115
111
  * Renders a chat message, read-only mode
116
112
  */
117
- function renderMessageRow(_x, _x2, _x3, _x4, _x5) {
118
- return _renderMessageRow.apply(this, arguments);
119
- }
120
- function _renderMessageRow() {
121
- _renderMessageRow = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee9(channelObject, message, fresh, options, userContext) {
122
- 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;
123
- return _regenerator["default"].wrap(function _callee9$(_context10) {
124
- while (1) switch (_context10.prev = _context10.next) {
125
- case 0:
126
- getBgColor = function _getBgColor(fresh) {
127
- return fresh ? '#e8ffe8' : 'white';
128
- };
129
- colorizeByAuthor = options.colorizeByAuthor === '1' || options.colorizeByAuthor === true;
130
- creator = _solidLogic.store.any(message, ns.foaf('maker'));
131
- date = _solidLogic.store.any(message, ns.dct('created'));
132
- _context10.next = 6;
133
- return (0, _chatLogic.mostRecentVersion)(message);
134
- case 6:
135
- latestVersion = _context10.sent;
136
- content = _solidLogic.store.any(latestVersion, ns.sioc('content')); // const id = store.any(latestVersion, ns.sioc('id'))
137
- // const replies = store.each(latestVersion, ns.sioc('has_reply'))
138
- _context10.next = 10;
139
- return (0, _chatLogic.allVersions)(message);
140
- case 10:
141
- versions = _context10.sent;
142
- if (versions.length > 1) {
143
- debug.log('renderMessageRow versions: ', versions.join(', '));
144
- }
145
- // be tolerant in accepting replies on any version of a message
146
- replies = versions.map(function (version) {
147
- return _solidLogic.store.each(version, ns.sioc('has_reply'));
148
- }).flat();
149
- thread = null;
150
- straightReplies = [];
151
- _iterator2 = _createForOfIteratorHelper(replies);
152
- try {
153
- for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
154
- reply = _step2.value;
155
- if (_solidLogic.store.holds(reply, ns.rdf('type'), ns.sioc('Thread'))) {
156
- thread = reply;
157
- debug.log('renderMessageRow: found thread: ' + thread);
158
- } else {
159
- straightReplies.push(reply);
160
- }
161
- }
162
- } catch (err) {
163
- _iterator2.e(err);
164
- } finally {
165
- _iterator2.f();
166
- }
167
- if (straightReplies.length > 1) {
168
- debug.log('renderMessageRow: found normal replies: ', straightReplies);
169
- }
170
- _context10.next = 20;
171
- return (0, _chatLogic.originalVersion)(message);
172
- case 20:
173
- originalMessage = _context10.sent;
174
- edited = !message.sameTerm(originalMessage); // @@ load it first @@ Or display the new data at the old date.
175
- // @@@ kludge!
176
- sortDate = _solidLogic.store.the(originalMessage, ns.dct('created'), null, originalMessage.doc()) || _solidLogic.store.the(message, ns.dct('created'), null, message.doc()); // In message
177
- messageRow = dom.createElement('tr');
178
- messageRow.AJAR_date = sortDate.value;
179
- messageRow.AJAR_subject = message;
180
- td1 = dom.createElement('td');
181
- messageRow.appendChild(td1);
182
- if (!options.authorDateOnLeft) {
183
- img = dom.createElement('img');
184
- img.setAttribute('style', 'max-height: 2.5em; max-width: 2.5em; border-radius: 0.5em; margin: auto;');
185
- widgets.setImage(img, creator);
186
- td1.appendChild(img);
187
- } else {
188
- creatorAndDate(td1, creator, widgets.shortDate(sortDate.value), message);
189
- }
190
- bothDates = widgets.shortDate(sortDate.value);
191
- if (edited) {
192
- bothDates += ' ... ' + widgets.shortDate(date.value);
193
- }
113
+ function renderMessageRow(channelObject, message, fresh, options, userContext) {
114
+ var colorizeByAuthor = options.colorizeByAuthor === '1' || options.colorizeByAuthor === true;
115
+ var creator = _solidLogic.store.any(message, ns.foaf('maker'));
116
+ var date = _solidLogic.store.any(message, ns.dct('created'));
117
+ var latestVersion = (0, _chatLogic.mostRecentVersion)(message);
118
+ var latestVersionCreator = _solidLogic.store.any(latestVersion, ns.foaf('maker'));
119
+ // use latest content if same owner, else use original
120
+ var msgId = creator.uri === latestVersionCreator.uri ? latestVersion : message;
121
+ var content = _solidLogic.store.any(msgId, ns.sioc('content'));
122
+ var signature = _solidLogic.store.any(msgId, $rdf.sym("".concat(_signature.SEC, "Proof")));
194
123
 
195
- // Render the content ot the message itself
196
- td2 = messageRow.appendChild(dom.createElement('td'));
197
- if (!options.authorDateOnLeft) {
198
- creatorAndDateHorizontal(td2, creator, bothDates,
199
- // widgets.shortDate(dateString)
200
- message);
201
- }
202
- text = content ? content.value.trim() : '??? no content?';
203
- isURI = /^https?:\/[^ <>]*$/i.test(text);
204
- para = null;
205
- if (isURI) {
206
- isImage = /\.(gif|jpg|jpeg|tiff|png|svg)$/i.test(text); // @@ Should use content-type not URI
207
- if (isImage && options.expandImagesInline) {
208
- _img = elementForImageURI(text, options);
209
- td2.appendChild(_img);
210
- } else {
211
- // Link but not Image
212
- anc = td2.appendChild(dom.createElement('a'));
213
- para = anc.appendChild(dom.createElement('p'));
214
- anc.href = text;
215
- para.textContent = text;
216
- td2.appendChild(anc);
217
- }
218
- } else {
219
- // text
220
- para = dom.createElement('p');
221
- td2.appendChild(para);
222
- para.textContent = text;
223
- }
224
- if (para) {
225
- bgcolor = colorizeByAuthor ? pad.lightColorHash(creator) : getBgColor(fresh);
226
- para.setAttribute('style', messageBodyStyle + 'background-color: ' + bgcolor + ';');
227
- }
228
- _context10.next = 40;
229
- return (0, _messageTools.sentimentStripLinked)(message, message.doc());
230
- case 40:
231
- strip = _context10.sent;
232
- if (strip.children.length) {
233
- td2.appendChild(dom.createElement('br'));
234
- td2.appendChild(strip);
235
- }
124
+ // verify signature
125
+ var msg = (0, _signature.getBlankMsg)();
126
+ msg.id = msgId.uri;
127
+ msg.created = _solidLogic.store.any(msgId, ns.dct('created')).value;
128
+ msg.content = content.value;
129
+ msg.maker = creator.uri;
236
130
 
237
- // Message tool bar button
238
- td3 = dom.createElement('td');
239
- messageRow.appendChild(td3);
240
- toolsButton = widgets.button(dom, _iconBase.icons.iconBase + 'noun_243787.svg', '...');
241
- td3.appendChild(toolsButton);
242
- toolsButton.addEventListener('click', /*#__PURE__*/function () {
243
- var _ref4 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee8(_event) {
244
- var toolsTR, tools, toolsTD;
245
- return _regenerator["default"].wrap(function _callee8$(_context9) {
246
- while (1) switch (_context9.prev = _context9.next) {
247
- case 0:
248
- if (!messageRow.toolTR) {
249
- _context9.next = 4;
250
- break;
251
- }
252
- // already got a toolbar? Toogle
253
- messageRow.parentNode.removeChild(messageRow.toolTR);
254
- delete messageRow.toolTR;
255
- return _context9.abrupt("return");
256
- case 4:
257
- toolsTR = dom.createElement('tr');
258
- _context9.next = 7;
259
- return (0, _messageTools.messageToolbar)(message, messageRow, _objectSpread(_objectSpread({}, userContext), {}, {
260
- chatOptions: options
261
- }), channelObject);
262
- case 7:
263
- tools = _context9.sent;
264
- 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
265
- if (messageRow.nextSibling) {
266
- messageRow.parentElement.insertBefore(toolsTR, messageRow.nextSibling);
267
- } else {
268
- messageRow.parentElement.appendChild(toolsTR);
269
- }
270
- messageRow.toolTR = toolsTR;
271
- toolsTR.appendChild(dom.createElement('td')); // left
272
- toolsTD = toolsTR.appendChild(dom.createElement('td'));
273
- toolsTR.appendChild(dom.createElement('td')); // right
274
- toolsTD.appendChild(tools);
275
- case 15:
276
- case "end":
277
- return _context9.stop();
278
- }
279
- }, _callee8);
280
- }));
281
- return function (_x20) {
282
- return _ref4.apply(this, arguments);
283
- };
284
- }());
285
- if (thread && options.showThread) {
286
- debug.log(' message has thread ' + thread);
287
- td3.appendChild(widgets.button(dom, _iconBase.icons.iconBase + 'noun_1180164.svg',
288
- // right arrow .. @@ think of stg better
289
- 'see thread', function (_e) {
290
- debug.log('@@@@ Calling showThread thread ' + thread);
291
- options.showThread(thread, options);
292
- }));
293
- }
294
- return _context10.abrupt("return", messageRow);
295
- case 49:
296
- case "end":
297
- return _context10.stop();
298
- }
299
- }, _callee9);
300
- }));
301
- return _renderMessageRow.apply(this, arguments);
131
+ // unsigned message
132
+ if (signature !== null && signature !== void 0 && signature.value) debug.warn(msgId.uri + ' is unsigned'); // TODO replace with UI (colored message ?)
133
+ // get public key and check signature
134
+ else {
135
+ (0, _keys.getPublicKey)(creator.uri).then(function (publicKey) {
136
+ if (!publicKey) debug.warn('message is signed but ' + creator.uri + ' is missing publicKey');
137
+ // check publicKey is valid hex string
138
+ var regex = /[0-9A-Fa-f]{6}/g;
139
+ if (!(publicKey !== null && publicKey !== void 0 && publicKey.match(regex))) debug.warn('invalid publicKey hex string\n' + creator.uri + '\n' + publicKey);
140
+ // verify signature
141
+ else if (signature !== null && signature !== void 0 && signature.value && !(0, _signature.verifySignature)(signature.value, msg, publicKey)) debug.warn('invalid signature\n' + msg.id);
142
+ });
143
+ }
144
+ var originalMessage = (0, _chatLogic.originalVersion)(message);
145
+ var edited = !message.sameTerm(originalMessage);
146
+ var sortDate = _solidLogic.store.the(originalMessage, ns.dct('created'), null, originalMessage.doc()); // In message
147
+
148
+ var messageRow = dom.createElement('tr');
149
+ messageRow.AJAR_date = sortDate.value;
150
+ messageRow.AJAR_subject = message;
151
+ var td1 = dom.createElement('td');
152
+ messageRow.appendChild(td1);
153
+ if (!options.authorDateOnLeft) {
154
+ var img = dom.createElement('img');
155
+ img.setAttribute('style', 'max-height: 2.5em; max-width: 2.5em; border-radius: 0.5em; margin: auto;');
156
+ widgets.setImage(img, creator);
157
+ td1.appendChild(img);
158
+ } else {
159
+ creatorAndDate(td1, creator, widgets.shortDate(sortDate.value), message);
160
+ }
161
+ var bothDates = widgets.shortDate(sortDate.value);
162
+ if (edited) {
163
+ bothDates += ' ... ' + widgets.shortDate(date.value);
164
+ }
165
+
166
+ // Render the content ot the message itself
167
+ var td2 = messageRow.appendChild(dom.createElement('td'));
168
+ if (!options.authorDateOnLeft) {
169
+ creatorAndDateHorizontal(td2, creator, bothDates,
170
+ // widgets.shortDate(dateString)
171
+ message);
172
+ }
173
+ var text = content.value.trim();
174
+ var isURI = /^https?:\/[^ <>]*$/i.test(text);
175
+ var para = null;
176
+ if (isURI) {
177
+ var isImage = /\.(gif|jpg|jpeg|tiff|png|svg)$/i.test(text); // @@ Should use content-type not URI
178
+ if (isImage && options.expandImagesInline) {
179
+ var _img = elementForImageURI(text, options);
180
+ td2.appendChild(_img);
181
+ } else {
182
+ // Link but not Image
183
+ var anc = td2.appendChild(dom.createElement('a'));
184
+ para = anc.appendChild(dom.createElement('p'));
185
+ anc.href = text;
186
+ para.textContent = text;
187
+ td2.appendChild(anc);
188
+ }
189
+ } else {
190
+ // text
191
+ para = dom.createElement('p');
192
+ td2.appendChild(para);
193
+ para.textContent = text;
194
+ }
195
+ if (para) {
196
+ var bgcolor = colorizeByAuthor ? pad.lightColorHash(creator) : getBgColor(fresh);
197
+ para.setAttribute('style', messageBodyStyle + 'background-color: ' + bgcolor + ';');
198
+ }
199
+ function getBgColor(fresh) {
200
+ return fresh ? '#e8ffe8' : 'white';
201
+ }
202
+
203
+ // Sentiment strip
204
+ var strip = (0, _messageTools.sentimentStripLinked)(message, message.doc());
205
+ if (strip.children.length) {
206
+ td2.appendChild(dom.createElement('br'));
207
+ td2.appendChild(strip);
208
+ }
209
+
210
+ // Message tool bar button
211
+ var td3 = dom.createElement('td');
212
+ messageRow.appendChild(td3);
213
+ var toolsButton = widgets.button(dom, _iconBase.icons.iconBase + 'noun_243787.svg', '...');
214
+ td3.appendChild(toolsButton);
215
+ toolsButton.addEventListener('click', function (_event) {
216
+ if (messageRow.toolTR) {
217
+ // already got a toolbar? Toogle
218
+ messageRow.parentNode.removeChild(messageRow.toolTR);
219
+ delete messageRow.toolTR;
220
+ return;
221
+ }
222
+ var toolsTR = dom.createElement('tr');
223
+ var tools = (0, _messageTools.messageToolbar)(message, messageRow, userContext, channelObject);
224
+ 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
225
+ if (messageRow.nextSibling) {
226
+ messageRow.parentElement.insertBefore(toolsTR, messageRow.nextSibling);
227
+ } else {
228
+ messageRow.parentElement.appendChild(toolsTR);
229
+ }
230
+ messageRow.toolTR = toolsTR;
231
+ toolsTR.appendChild(dom.createElement('td')); // left
232
+ var toolsTD = toolsTR.appendChild(dom.createElement('td'));
233
+ toolsTR.appendChild(dom.createElement('td')); // right
234
+ toolsTD.appendChild(tools);
235
+ });
236
+ return messageRow;
302
237
  }
303
- function switchToEditor(_x6, _x7, _x8, _x9) {
304
- return _switchToEditor.apply(this, arguments);
238
+ function switchToEditor(messageRow, message, channelObject, userContext) {
239
+ var messageTable = messageRow.parentNode;
240
+ var editRow = renderMessageEditor(channelObject, messageTable, userContext, channelObject.options, (0, _chatLogic.mostRecentVersion)(message));
241
+ messageTable.insertBefore(editRow, messageRow);
242
+ editRow.originalRow = messageRow;
243
+ messageRow.style.visibility = 'hidden'; // Hide the original message. unhide if user cancels edit
305
244
  }
306
245
  /* Control for a new message -- or editing an old message ***************
307
246
  *
308
247
  */
309
- function _switchToEditor() {
310
- _switchToEditor = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee10(messageRow, message, channelObject, userContext) {
311
- var messageTable, editRow;
312
- return _regenerator["default"].wrap(function _callee10$(_context11) {
313
- while (1) switch (_context11.prev = _context11.next) {
314
- case 0:
315
- messageTable = messageRow.parentNode;
316
- _context11.t0 = renderMessageEditor;
317
- _context11.t1 = channelObject;
318
- _context11.t2 = messageTable;
319
- _context11.t3 = userContext;
320
- _context11.t4 = channelObject.options;
321
- _context11.next = 8;
322
- return (0, _chatLogic.mostRecentVersion)(message);
323
- case 8:
324
- _context11.t5 = _context11.sent;
325
- editRow = (0, _context11.t0)(_context11.t1, _context11.t2, _context11.t3, _context11.t4, _context11.t5);
326
- messageTable.insertBefore(editRow, messageRow);
327
- editRow.originalRow = messageRow;
328
- messageRow.style.visibility = 'hidden'; // Hide the original message. unhide if user cancels edit
329
- case 13:
330
- case "end":
331
- return _context11.stop();
332
- }
333
- }, _callee10);
334
- }));
335
- return _switchToEditor.apply(this, arguments);
336
- }
337
248
  function renderMessageEditor(channelObject, messageTable, userContext, options, originalMessage) {
338
249
  function revertEditing(messageEditor) {
339
250
  messageEditor.originalRow.style.visibility = 'visible'; // restore read-only version
340
251
  messageEditor.parentNode.removeChild(messageEditor);
341
252
  }
342
- function handleFieldInput(_x10) {
253
+ function handleFieldInput(_x) {
343
254
  return _handleFieldInput.apply(this, arguments);
344
255
  }
345
256
  function _handleFieldInput() {
@@ -357,86 +268,72 @@ function renderMessageEditor(channelObject, messageTable, userContext, options,
357
268
  }));
358
269
  return _handleFieldInput.apply(this, arguments);
359
270
  }
360
- function sendMessage(_x11, _x12) {
271
+ function sendMessage(_x2, _x3) {
361
272
  return _sendMessage.apply(this, arguments);
362
273
  } // sendMessage
363
274
  // DRAG AND DROP
364
275
  function _sendMessage() {
365
- _sendMessage = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee7(text, fromMainField) {
366
- var sendComplete, _sendComplete, message, statusArea;
367
- return _regenerator["default"].wrap(function _callee7$(_context8) {
368
- while (1) switch (_context8.prev = _context8.next) {
276
+ _sendMessage = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee6(text, fromMainField) {
277
+ var sendComplete, message, statusArea;
278
+ return _regenerator["default"].wrap(function _callee6$(_context7) {
279
+ while (1) switch (_context7.prev = _context7.next) {
369
280
  case 0:
370
- _sendComplete = function _sendComplete3() {
371
- _sendComplete = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee6(message, _text2) {
372
- var oldRow;
373
- return _regenerator["default"].wrap(function _callee6$(_context7) {
374
- while (1) switch (_context7.prev = _context7.next) {
375
- case 0:
376
- _context7.next = 2;
377
- return (0, _infinite.insertMessageIntoTable)(channelObject, messageTable, message, false, options, userContext);
378
- case 2:
379
- // not green
281
+ sendComplete = function _sendComplete(message, _text2) {
282
+ // const dateStamp = store.any(message, ns.dct('created'), null, message.doc())
283
+ // const content = $rdf.literal(text2)
284
+ (0, _infinite.insertMessageIntoTable)(channelObject, messageTable, message, false, options, userContext); // not green
380
285
 
381
- if (originalMessage) {
382
- // editing another message
383
- oldRow = messageEditor.originalRow; // oldRow.style.display = '' // restore read-only version, re-attack
384
- if (oldRow.parentNode) {
385
- oldRow.parentNode.removeChild(oldRow); // No longer needed old version
386
- } else {
387
- debug.warn('No parentNode on old message ' + oldRow.textContent);
388
- oldRow.style.backgroundColor = '#fee';
389
- oldRow.style.visibility = 'hidden'; // @@ FIX THIS AND REMOVE FROM DOM INSTEAD
390
- }
286
+ if (originalMessage) {
287
+ // editing another message
288
+ var oldRow = messageEditor.originalRow;
289
+ // oldRow.style.display = '' // restore read-only version, re-attack
290
+ if (oldRow.parentNode) {
291
+ oldRow.parentNode.removeChild(oldRow); // No longer needed old version
292
+ } else {
293
+ debug.warn('No parentNode on old message ' + oldRow.textContent);
294
+ oldRow.style.backgroundColor = '#fee';
295
+ oldRow.style.visibility = 'hidden'; // @@ FIX THIS AND REMOVE FROM DOM INSTEAD
296
+ }
391
297
 
392
- messageEditor.parentNode.removeChild(messageEditor); // no longer need editor
393
- } else {
394
- if (fromMainField) {
395
- field.value = ''; // clear from out for reuse
396
- field.setAttribute('style', messageBodyStyle);
397
- field.disabled = false;
398
- field.scrollIntoView(options.newestFirst); // allign bottom (top)
399
- field.focus(); // Start typing next line immediately
400
- field.select();
401
- }
402
- }
403
- // await channelObject.div.refresh() // Add new day if nec @@ add back
404
- case 3:
405
- case "end":
406
- return _context7.stop();
407
- }
408
- }, _callee6);
409
- }));
410
- return _sendComplete.apply(this, arguments);
298
+ messageEditor.parentNode.removeChild(messageEditor); // no longer need editor
299
+ } else {
300
+ if (fromMainField) {
301
+ field.value = ''; // clear from out for reuse
302
+ field.setAttribute('style', messageBodyStyle);
303
+ field.disabled = false;
304
+ field.scrollIntoView(options.newestFirst); // allign bottom (top)
305
+ field.focus(); // Start typing next line immediately
306
+ field.select();
307
+ }
308
+ }
309
+ // await channelObject.div.refresh() // Add new day if nec @@ add back
411
310
  };
412
- sendComplete = function _sendComplete2(_x18, _x19) {
413
- return _sendComplete.apply(this, arguments);
414
- }; // const me = authn.currentUser() // Must be logged on or wuld have got login button
311
+
312
+ // const me = authn.currentUser() // Must be logged on or wuld have got login button
415
313
  if (fromMainField) {
416
314
  field.setAttribute('style', messageBodyStyle + 'color: #bbb;'); // pendingedit
417
315
  field.disabled = true;
418
316
  }
419
- _context8.prev = 3;
420
- _context8.next = 6;
421
- return channelObject.updateMessage(text, originalMessage, null, options.thread);
422
- case 6:
423
- message = _context8.sent;
424
- _context8.next = 14;
317
+ _context7.prev = 2;
318
+ _context7.next = 5;
319
+ return channelObject.updateMessage(text, originalMessage);
320
+ case 5:
321
+ message = _context7.sent;
322
+ _context7.next = 13;
425
323
  break;
426
- case 9:
427
- _context8.prev = 9;
428
- _context8.t0 = _context8["catch"](3);
324
+ case 8:
325
+ _context7.prev = 8;
326
+ _context7.t0 = _context7["catch"](2);
429
327
  statusArea = userContext.statusArea || messageEditor;
430
- statusArea.appendChild(widgets.errorMessageBlock(dom, 'Error writing message: ' + _context8.t0));
431
- return _context8.abrupt("return");
328
+ statusArea.appendChild(widgets.errorMessageBlock(dom, 'Error writing message: ' + _context7.t0));
329
+ return _context7.abrupt("return");
330
+ case 13:
331
+ sendComplete(message, text);
432
332
  case 14:
433
- _context8.next = 16;
434
- return sendComplete(message, text);
435
- case 16:
436
333
  case "end":
437
- return _context8.stop();
334
+ return _context7.stop();
438
335
  }
439
- }, _callee7, null, [[3, 9]]);
336
+ }, _callee6, null, [[2, 8]]);
440
337
  }));
441
338
  return _sendMessage.apply(this, arguments);
442
339
  }
@@ -455,7 +352,7 @@ function renderMessageEditor(channelObject, messageTable, userContext, options,
455
352
  }
456
353
  }, _callee);
457
354
  }));
458
- return function (_x13, _x14) {
355
+ return function (_x4, _x5) {
459
356
  return _ref.apply(this, arguments);
460
357
  };
461
358
  }());
@@ -499,7 +396,7 @@ function renderMessageEditor(channelObject, messageTable, userContext, options,
499
396
  }
500
397
  }, _callee2, null, [[1, 11, 14, 17]]);
501
398
  }));
502
- return function droppedURIHandler(_x15) {
399
+ return function droppedURIHandler(_x6) {
503
400
  return _ref2.apply(this, arguments);
504
401
  };
505
402
  }();
@@ -510,7 +407,7 @@ function renderMessageEditor(channelObject, messageTable, userContext, options,
510
407
  imageDoc = $rdf.sym(chatDocument.dir().uri + 'Image_' + Date.now() + '.png');
511
408
  return imageDoc;
512
409
  }
513
- function tookPicture(_x16) {
410
+ function tookPicture(_x7) {
514
411
  return _tookPicture.apply(this, arguments);
515
412
  } // Body of turnOnInput
516
413
  function _tookPicture() {
@@ -587,7 +484,7 @@ function renderMessageEditor(channelObject, messageTable, userContext, options,
587
484
  }
588
485
  }, _callee3);
589
486
  }));
590
- return function (_x17) {
487
+ return function (_x8) {
591
488
  return _ref3.apply(this, arguments);
592
489
  };
593
490
  }(), false);
@@ -649,7 +546,7 @@ function renderMessageEditor(channelObject, messageTable, userContext, options,
649
546
  turnOnInput();
650
547
  Object.assign(context, userContext);
651
548
  (0, _bookmarks.findBookmarkDocument)(context).then(function (_context) {
652
- // debug.log('Bookmark file: ' + context.bookmarkDocument)
549
+ // console.log('Bookmark file: ' + context.bookmarkDocument)
653
550
  });
654
551
  });
655
552
  return messageEditor;