solid-ui 2.4.23 → 2.4.24

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 (136) hide show
  1. package/dist/main.js +2159 -5039
  2. package/dist/main.js.map +1 -1
  3. package/lib/acl/access-controller.js +4 -67
  4. package/lib/acl/access-controller.js.map +1 -1
  5. package/lib/acl/access-groups.js +59 -137
  6. package/lib/acl/access-groups.js.map +1 -1
  7. package/lib/acl/acl-control.js +14 -54
  8. package/lib/acl/acl-control.js.map +1 -1
  9. package/lib/acl/acl.js +32 -107
  10. package/lib/acl/acl.js.map +1 -1
  11. package/lib/acl/add-agent-buttons.js +0 -92
  12. package/lib/acl/add-agent-buttons.js.map +1 -1
  13. package/lib/acl/index.js +1 -3
  14. package/lib/acl/index.js.map +1 -1
  15. package/lib/acl/styles.js +1 -2
  16. package/lib/acl/styles.js.map +1 -1
  17. package/lib/chat/bookmarks.js +8 -80
  18. package/lib/chat/bookmarks.js.map +1 -1
  19. package/lib/chat/chatLogic.js +109 -180
  20. package/lib/chat/chatLogic.js.map +1 -1
  21. package/lib/chat/dateFolder.js +6 -91
  22. package/lib/chat/dateFolder.js.map +1 -1
  23. package/lib/chat/infinite.js +33 -185
  24. package/lib/chat/infinite.js.map +1 -1
  25. package/lib/chat/message.js +37 -150
  26. package/lib/chat/message.js.map +1 -1
  27. package/lib/chat/messageTools.js +23 -96
  28. package/lib/chat/messageTools.js.map +1 -1
  29. package/lib/chat/thread.js +33 -91
  30. package/lib/chat/thread.js.map +1 -1
  31. package/lib/create/create.js +19 -51
  32. package/lib/create/create.js.map +1 -1
  33. package/lib/create/index.js +0 -2
  34. package/lib/create/index.js.map +1 -1
  35. package/lib/debug.js +0 -8
  36. package/lib/debug.js.map +1 -1
  37. package/lib/folders.js +4 -27
  38. package/lib/folders.js.map +1 -1
  39. package/lib/footer/index.js +2 -24
  40. package/lib/footer/index.js.map +1 -1
  41. package/lib/footer/styleMap.js.map +1 -1
  42. package/lib/header/empty-profile.js.map +1 -1
  43. package/lib/header/index.js +3 -72
  44. package/lib/header/index.js.map +1 -1
  45. package/lib/header/styleMap.js +4 -3
  46. package/lib/header/styleMap.js.map +1 -1
  47. package/lib/iconBase.js +3 -4
  48. package/lib/iconBase.js.map +1 -1
  49. package/lib/index.js +5 -46
  50. package/lib/index.js.map +1 -1
  51. package/lib/jss/index.js +3 -9
  52. package/lib/jss/index.js.map +1 -1
  53. package/lib/log.js +15 -51
  54. package/lib/log.js.map +1 -1
  55. package/lib/login/login.js +74 -303
  56. package/lib/login/login.js.map +1 -1
  57. package/lib/matrix/index.js +0 -2
  58. package/lib/matrix/index.js.map +1 -1
  59. package/lib/matrix/matrix.js +7 -55
  60. package/lib/matrix/matrix.js.map +1 -1
  61. package/lib/media/index.js +0 -2
  62. package/lib/media/index.js.map +1 -1
  63. package/lib/media/media-capture.js +13 -33
  64. package/lib/media/media-capture.js.map +1 -1
  65. package/lib/messageArea.js +23 -64
  66. package/lib/messageArea.js.map +1 -1
  67. package/lib/noun_Camera_1618446_000000.js.map +1 -1
  68. package/lib/ns.js +5 -7
  69. package/lib/ns.js.map +1 -1
  70. package/lib/pad.js +48 -234
  71. package/lib/pad.js.map +1 -1
  72. package/lib/participation.js +10 -65
  73. package/lib/participation.js.map +1 -1
  74. package/lib/preferences.js +21 -42
  75. package/lib/preferences.js.map +1 -1
  76. package/lib/signup/config-default.js +1 -8
  77. package/lib/signup/config-default.js.map +1 -1
  78. package/lib/signup/signup.js +6 -13
  79. package/lib/signup/signup.js.map +1 -1
  80. package/lib/stories/decorators.js +0 -2
  81. package/lib/stories/decorators.js.map +1 -1
  82. package/lib/style.js +8 -5
  83. package/lib/style.js.map +1 -1
  84. package/lib/style_multiSelect.js +1 -5
  85. package/lib/style_multiSelect.js.map +1 -1
  86. package/lib/table.js +309 -322
  87. package/lib/table.js.map +1 -1
  88. package/lib/tabs.js +20 -100
  89. package/lib/tabs.js.map +1 -1
  90. package/lib/utils/headerFooterHelpers.js +4 -52
  91. package/lib/utils/headerFooterHelpers.js.map +1 -1
  92. package/lib/utils/index.js +41 -135
  93. package/lib/utils/index.js.map +1 -1
  94. package/lib/utils/label.js +13 -34
  95. package/lib/utils/label.js.map +1 -1
  96. package/lib/versionInfo.js +4 -4
  97. package/lib/versionInfo.js.map +1 -1
  98. package/lib/widgets/buttons/iconLinks.js +0 -8
  99. package/lib/widgets/buttons/iconLinks.js.map +1 -1
  100. package/lib/widgets/buttons.js +115 -291
  101. package/lib/widgets/buttons.js.map +1 -1
  102. package/lib/widgets/dragAndDrop.js +12 -41
  103. package/lib/widgets/dragAndDrop.js.map +1 -1
  104. package/lib/widgets/error.js +3 -9
  105. package/lib/widgets/error.js.map +1 -1
  106. package/lib/widgets/forms/autocomplete/autocompleteBar.js +8 -71
  107. package/lib/widgets/forms/autocomplete/autocompleteBar.js.map +1 -1
  108. package/lib/widgets/forms/autocomplete/autocompleteField.js +13 -65
  109. package/lib/widgets/forms/autocomplete/autocompleteField.js.map +1 -1
  110. package/lib/widgets/forms/autocomplete/autocompletePicker.js +15 -107
  111. package/lib/widgets/forms/autocomplete/autocompletePicker.js.map +1 -1
  112. package/lib/widgets/forms/autocomplete/language.js +6 -55
  113. package/lib/widgets/forms/autocomplete/language.js.map +1 -1
  114. package/lib/widgets/forms/autocomplete/publicData.js +12 -131
  115. package/lib/widgets/forms/autocomplete/publicData.js.map +1 -1
  116. package/lib/widgets/forms/basic.js +12 -55
  117. package/lib/widgets/forms/basic.js.map +1 -1
  118. package/lib/widgets/forms/comment.js +1 -15
  119. package/lib/widgets/forms/comment.js.map +1 -1
  120. package/lib/widgets/forms/fieldFunction.js +3 -16
  121. package/lib/widgets/forms/fieldFunction.js.map +1 -1
  122. package/lib/widgets/forms/fieldParams.js +0 -12
  123. package/lib/widgets/forms/fieldParams.js.map +1 -1
  124. package/lib/widgets/forms/formStyle.js +1 -14
  125. package/lib/widgets/forms/formStyle.js.map +1 -1
  126. package/lib/widgets/forms.js +70 -474
  127. package/lib/widgets/forms.js.map +1 -1
  128. package/lib/widgets/index.js +0 -21
  129. package/lib/widgets/index.js.map +1 -1
  130. package/lib/widgets/multiSelect.js +48 -171
  131. package/lib/widgets/multiSelect.js.map +1 -1
  132. package/lib/widgets/peoplePicker.js +20 -90
  133. package/lib/widgets/peoplePicker.js.map +1 -1
  134. package/lib/widgets/widgetHelpers.js +2 -9
  135. package/lib/widgets/widgetHelpers.js.map +1 -1
  136. package/package.json +28 -28
@@ -1,45 +1,28 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  var _typeof = require("@babel/runtime/helpers/typeof");
6
-
7
5
  Object.defineProperty(exports, "__esModule", {
8
6
  value: true
9
7
  });
10
8
  exports.AccessController = void 0;
11
-
12
9
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
13
-
14
10
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
15
-
16
11
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
17
-
18
12
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
19
-
20
13
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
21
-
22
14
  var _acl = require("./acl");
23
-
24
15
  var _rdflib = require("rdflib");
25
-
26
16
  var _accessGroups = require("./access-groups");
27
-
28
17
  var _aclControl = require("./acl-control");
29
-
30
18
  var utils = _interopRequireWildcard(require("../utils"));
31
-
32
19
  var debug = _interopRequireWildcard(require("../debug"));
33
-
34
20
  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); }
35
-
36
21
  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; }
37
-
38
22
  /**
39
23
  * Contains the [[AccessController]] class
40
24
  * @packageDocumentation
41
25
  */
42
-
43
26
  /**
44
27
  * Rendered HTML component used in the databrowser's Sharing pane.
45
28
  */
@@ -68,7 +51,6 @@ var AccessController = /*#__PURE__*/function () {
68
51
  this.rootElement = dom.createElement('div');
69
52
  this.rootElement.classList.add(classes.aclGroupContent);
70
53
  this.isContainer = targetDoc.uri.slice(-1) === '/'; // Give default for all directories
71
-
72
54
  if (defaultHolder && defaultACLDoc) {
73
55
  this.isUsingDefaults = true;
74
56
  var aclDefaultStore = (0, _acl.adoptACLDefault)(this.targetDoc, targetACLDoc, defaultHolder, defaultACLDoc);
@@ -86,7 +68,6 @@ var AccessController = /*#__PURE__*/function () {
86
68
  this.defaultsDiffer = !(0, _acl.sameACL)(this.mainCombo.aclMap, this.defaultsCombo.aclMap);
87
69
  }
88
70
  }
89
-
90
71
  (0, _createClass2["default"])(AccessController, [{
91
72
  key: "isEditable",
92
73
  get: function get() {
@@ -96,10 +77,8 @@ var AccessController = /*#__PURE__*/function () {
96
77
  key: "render",
97
78
  value: function render() {
98
79
  this.rootElement.innerHTML = '';
99
-
100
80
  if (this.isUsingDefaults) {
101
81
  this.renderStatus("The sharing for this ".concat(this.noun, " is the default for folder "));
102
-
103
82
  if (this.defaultHolder) {
104
83
  var defaultHolderLink = this.statusElement.appendChild(this.dom.createElement('a'));
105
84
  defaultHolderLink.href = this.defaultHolder.uri;
@@ -110,29 +89,24 @@ var AccessController = /*#__PURE__*/function () {
110
89
  } else {
111
90
  this.renderStatus('');
112
91
  }
113
-
114
92
  this.rootElement.appendChild(this.mainCombo.render());
115
-
116
93
  if (this.defaultsCombo && this.defaultsDiffer) {
117
94
  this.rootElement.appendChild(this.renderRemoveDefaultsController());
118
95
  this.rootElement.appendChild(this.defaultsCombo.render());
119
96
  } else if (this.isEditable && this.isContainer) {
120
97
  this.rootElement.appendChild(this.renderAddDefaultsController());
121
98
  }
122
-
123
99
  if (!this.targetIsProtected && this.isUsingDefaults) {
124
100
  this.rootElement.appendChild(this.renderAddAclsController());
125
101
  } else if (!this.targetIsProtected) {
126
102
  this.rootElement.appendChild(this.renderRemoveAclsController());
127
103
  }
128
-
129
104
  return this.rootElement;
130
105
  }
131
106
  }, {
132
107
  key: "renderRemoveAclsController",
133
108
  value: function renderRemoveAclsController() {
134
109
  var _this = this;
135
-
136
110
  var useDefaultButton = this.dom.createElement('button');
137
111
  useDefaultButton.innerText = "Remove custom sharing settings for this ".concat(this.noun, " -- just use default").concat(this.prospectiveDefaultHolder ? " for ".concat(utils.label(this.prospectiveDefaultHolder)) : '');
138
112
  useDefaultButton.classList.add(this.classes.bigButton);
@@ -149,7 +123,6 @@ var AccessController = /*#__PURE__*/function () {
149
123
  key: "renderAddAclsController",
150
124
  value: function renderAddAclsController() {
151
125
  var _this2 = this;
152
-
153
126
  var addAclButton = this.dom.createElement('button');
154
127
  addAclButton.innerText = "Set specific sharing for this ".concat(this.noun);
155
128
  addAclButton.classList.add(this.classes.bigButton);
@@ -166,7 +139,6 @@ var AccessController = /*#__PURE__*/function () {
166
139
  key: "renderAddDefaultsController",
167
140
  value: function renderAddDefaultsController() {
168
141
  var _this3 = this;
169
-
170
142
  var containerElement = this.dom.createElement('div');
171
143
  containerElement.classList.add(this.classes.defaultsController);
172
144
  var noticeElement = containerElement.appendChild(this.dom.createElement('div'));
@@ -186,7 +158,6 @@ var AccessController = /*#__PURE__*/function () {
186
158
  key: "renderRemoveDefaultsController",
187
159
  value: function renderRemoveDefaultsController() {
188
160
  var _this4 = this;
189
-
190
161
  var containerElement = this.dom.createElement('div');
191
162
  containerElement.classList.add(this.classes.defaultsController);
192
163
  var noticeElement = containerElement.appendChild(this.dom.createElement('div'));
@@ -208,7 +179,6 @@ var AccessController = /*#__PURE__*/function () {
208
179
  key: "renderTemporaryStatus",
209
180
  value: function renderTemporaryStatus(message) {
210
181
  var _this5 = this;
211
-
212
182
  // @@ TODO Introduce better system for error notification to user https://github.com/solidos/mashlib/issues/87
213
183
  this.statusElement.classList.add(this.classes.aclControlBoxStatusRevealed);
214
184
  this.statusElement.innerText = message;
@@ -232,9 +202,7 @@ var AccessController = /*#__PURE__*/function () {
232
202
  value: function () {
233
203
  var _addAcls = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() {
234
204
  var _this6 = this;
235
-
236
205
  var message, aclGraph, _message;
237
-
238
206
  return _regenerator["default"].wrap(function _callee$(_context) {
239
207
  while (1) {
240
208
  switch (_context.prev = _context.next) {
@@ -243,11 +211,9 @@ var AccessController = /*#__PURE__*/function () {
243
211
  _context.next = 4;
244
212
  break;
245
213
  }
246
-
247
214
  message = 'Unable to find defaults to copy';
248
215
  debug.error(message);
249
216
  return _context.abrupt("return", Promise.reject(message));
250
-
251
217
  case 4:
252
218
  aclGraph = (0, _acl.adoptACLDefault)(this.targetDoc, this.targetACLDoc, this.defaultHolder, this.defaultACLDoc);
253
219
  aclGraph.statements.forEach(function (st) {
@@ -256,18 +222,15 @@ var AccessController = /*#__PURE__*/function () {
256
222
  _context.prev = 6;
257
223
  _context.next = 9;
258
224
  return this.store.fetcher.putBack(this.targetACLDoc);
259
-
260
225
  case 9:
261
226
  this.isUsingDefaults = false;
262
227
  return _context.abrupt("return", Promise.resolve());
263
-
264
228
  case 13:
265
229
  _context.prev = 13;
266
230
  _context.t0 = _context["catch"](6);
267
231
  _message = " Error writing back access control file! ".concat(_context.t0);
268
232
  debug.error(_message);
269
233
  return _context.abrupt("return", Promise.reject(_message));
270
-
271
234
  case 18:
272
235
  case "end":
273
236
  return _context.stop();
@@ -275,11 +238,9 @@ var AccessController = /*#__PURE__*/function () {
275
238
  }
276
239
  }, _callee, this, [[6, 13]]);
277
240
  }));
278
-
279
241
  function addAcls() {
280
242
  return _addAcls.apply(this, arguments);
281
243
  }
282
-
283
244
  return addAcls;
284
245
  }()
285
246
  }, {
@@ -294,7 +255,6 @@ var AccessController = /*#__PURE__*/function () {
294
255
  defaults: true
295
256
  });
296
257
  this.defaultsDiffer = true;
297
-
298
258
  case 2:
299
259
  case "end":
300
260
  return _context2.stop();
@@ -302,11 +262,9 @@ var AccessController = /*#__PURE__*/function () {
302
262
  }
303
263
  }, _callee2, this);
304
264
  }));
305
-
306
265
  function addDefaults() {
307
266
  return _addDefaults.apply(this, arguments);
308
267
  }
309
-
310
268
  return addDefaults;
311
269
  }()
312
270
  }, {
@@ -321,35 +279,29 @@ var AccessController = /*#__PURE__*/function () {
321
279
  _context3.prev = 0;
322
280
  _context3.next = 3;
323
281
  return this.store.fetcher["delete"](this.targetACLDoc.uri, {});
324
-
325
282
  case 3:
326
283
  this.isUsingDefaults = true;
327
284
  _context3.prev = 4;
328
285
  _context3.next = 7;
329
286
  return (0, _acl.getProspectiveHolder)(this.targetDoc.uri);
330
-
331
287
  case 7:
332
288
  this.prospectiveDefaultHolder = _context3.sent;
333
289
  _context3.next = 13;
334
290
  break;
335
-
336
291
  case 10:
337
292
  _context3.prev = 10;
338
293
  _context3.t0 = _context3["catch"](4);
339
294
  // No need to show this error in status, but good to warn about it in console
340
295
  debug.warn(_context3.t0);
341
-
342
296
  case 13:
343
297
  _context3.next = 20;
344
298
  break;
345
-
346
299
  case 15:
347
300
  _context3.prev = 15;
348
301
  _context3.t1 = _context3["catch"](0);
349
302
  message = "Error deleting access control file: ".concat(this.targetACLDoc, ": ").concat(_context3.t1);
350
303
  debug.error(message);
351
304
  return _context3.abrupt("return", Promise.reject(message));
352
-
353
305
  case 20:
354
306
  case "end":
355
307
  return _context3.stop();
@@ -357,11 +309,9 @@ var AccessController = /*#__PURE__*/function () {
357
309
  }
358
310
  }, _callee3, this, [[0, 15], [4, 10]]);
359
311
  }));
360
-
361
312
  function removeAcls() {
362
313
  return _removeAcls.apply(this, arguments);
363
314
  }
364
-
365
315
  return removeAcls;
366
316
  }()
367
317
  }, {
@@ -379,11 +329,9 @@ var AccessController = /*#__PURE__*/function () {
379
329
  this.defaultsDiffer = false;
380
330
  _context4.next = 6;
381
331
  return this.save();
382
-
383
332
  case 6:
384
333
  _context4.next = 14;
385
334
  break;
386
-
387
335
  case 8:
388
336
  _context4.prev = 8;
389
337
  _context4.t0 = _context4["catch"](1);
@@ -391,7 +339,6 @@ var AccessController = /*#__PURE__*/function () {
391
339
  this.defaultsDiffer = true;
392
340
  debug.error(_context4.t0);
393
341
  return _context4.abrupt("return", Promise.reject(_context4.t0));
394
-
395
342
  case 14:
396
343
  case "end":
397
344
  return _context4.stop();
@@ -399,21 +346,17 @@ var AccessController = /*#__PURE__*/function () {
399
346
  }
400
347
  }, _callee4, this, [[1, 8]]);
401
348
  }));
402
-
403
349
  function removeDefaults() {
404
350
  return _removeDefaults.apply(this, arguments);
405
351
  }
406
-
407
352
  return removeDefaults;
408
353
  }()
409
354
  }, {
410
355
  key: "save",
411
356
  value: function save() {
412
357
  var _this7 = this;
413
-
414
358
  // build graph
415
359
  var newAClGraph = (0, _rdflib.graph)();
416
-
417
360
  if (!this.isContainer) {
418
361
  (0, _acl.makeACLGraphbyCombo)(newAClGraph, this.targetDoc, this.mainCombo.byCombo, this.targetACLDoc, true);
419
362
  } else if (this.defaultsCombo && this.defaultsDiffer) {
@@ -423,32 +366,27 @@ var AccessController = /*#__PURE__*/function () {
423
366
  } else {
424
367
  // Linked controls
425
368
  (0, _acl.makeACLGraphbyCombo)(newAClGraph, this.targetDoc, this.mainCombo.byCombo, this.targetACLDoc, true, true);
426
- } // add authenticated fetcher
427
-
369
+ }
428
370
 
371
+ // add authenticated fetcher
429
372
  newAClGraph.fetcher = (0, _rdflib.fetcher)(newAClGraph, {
430
373
  fetch: this.store.fetcher._fetch
431
374
  });
432
- var updater = newAClGraph.updater || new _rdflib.UpdateManager(newAClGraph); // save ACL resource
375
+ var updater = newAClGraph.updater || new _rdflib.UpdateManager(newAClGraph);
433
376
 
377
+ // save ACL resource
434
378
  return new Promise(function (resolve, reject) {
435
379
  updater.put(_this7.targetACLDoc, newAClGraph.statementsMatching(undefined, undefined, undefined, _this7.targetACLDoc), 'text/turtle', function (uri, ok, message) {
436
380
  if (!ok) {
437
381
  return reject(new Error("ACL file save failed: ".concat(message)));
438
382
  }
439
-
440
383
  _this7.store.fetcher.unload(_this7.targetACLDoc);
441
-
442
384
  _this7.store.add(newAClGraph.statements);
443
-
444
385
  _this7.store.fetcher.requested[_this7.targetACLDoc.uri] = 'done'; // missing: save headers
445
-
446
386
  _this7.mainCombo.store = _this7.store;
447
-
448
387
  if (_this7.defaultsCombo) {
449
388
  _this7.defaultsCombo.store = _this7.store;
450
389
  }
451
-
452
390
  _this7.defaultsDiffer = !!_this7.defaultsCombo && !(0, _acl.sameACL)(_this7.mainCombo.aclMap, _this7.defaultsCombo.aclMap);
453
391
  debug.log('ACL modification: success!');
454
392
  resolve();
@@ -458,6 +396,5 @@ var AccessController = /*#__PURE__*/function () {
458
396
  }]);
459
397
  return AccessController;
460
398
  }();
461
-
462
399
  exports.AccessController = AccessController;
463
400
  //# sourceMappingURL=access-controller.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"access-controller.js","names":["AccessController","subject","noun","context","statusElement","classes","targetIsProtected","targetDoc","targetACLDoc","defaultHolder","defaultACLDoc","prospectiveDefaultHolder","store","dom","rootElement","createElement","classList","add","aclGroupContent","isContainer","uri","slice","isUsingDefaults","aclDefaultStore","adoptACLDefault","mainCombo","AccessGroups","defaults","defaultsCombo","defaultsDiffer","sameACL","aclMap","innerHTML","renderStatus","defaultHolderLink","appendChild","href","innerText","shortNameForFolder","render","renderRemoveDefaultsController","isEditable","renderAddDefaultsController","renderAddAclsController","renderRemoveAclsController","useDefaultButton","utils","label","bigButton","addEventListener","removeAcls","then","error","addAclButton","addAcls","containerElement","defaultsController","noticeElement","defaultsControllerNotice","button","addDefaults","removeDefaults","message","aclControlBoxStatusRevealed","temporaryStatusInit","setTimeout","temporaryStatusEnd","toggle","debug","Promise","reject","aclGraph","statements","forEach","st","predicate","object","fetcher","putBack","resolve","getProspectiveHolder","warn","fallbackCombo","save","newAClGraph","graph","makeACLGraphbyCombo","byCombo","fetch","_fetch","updater","UpdateManager","put","statementsMatching","undefined","ok","Error","unload","requested","log"],"sources":["../../src/acl/access-controller.ts"],"sourcesContent":["/**\n * Contains the [[AccessController]] class\n * @packageDocumentation\n */\n\nimport { adoptACLDefault, getProspectiveHolder, makeACLGraphbyCombo, sameACL } from './acl'\nimport { fetcher, graph, NamedNode, UpdateManager } from 'rdflib'\nimport { AccessGroups } from './access-groups'\nimport { DataBrowserContext } from 'pane-registry'\nimport { shortNameForFolder } from './acl-control'\nimport * as utils from '../utils'\nimport * as debug from '../debug'\n\n/**\n * Rendered HTML component used in the databrowser's Sharing pane.\n */\nexport class AccessController {\n public mainCombo: AccessGroups\n public defaultsCombo: AccessGroups | null\n private readonly isContainer: boolean\n private defaultsDiffer: boolean\n private readonly rootElement: HTMLElement\n private isUsingDefaults: boolean\n\n constructor (\n public subject: NamedNode,\n public noun: string,\n public context: DataBrowserContext,\n private statusElement: HTMLElement,\n public classes: Record<string, string>,\n public targetIsProtected: boolean,\n private targetDoc: NamedNode,\n private targetACLDoc: NamedNode,\n private defaultHolder: NamedNode | null,\n private defaultACLDoc: NamedNode | null,\n private prospectiveDefaultHolder: NamedNode | undefined,\n public store,\n public dom\n ) {\n this.rootElement = dom.createElement('div')\n this.rootElement.classList.add(classes.aclGroupContent)\n this.isContainer = targetDoc.uri.slice(-1) === '/' // Give default for all directories\n if (defaultHolder && defaultACLDoc) {\n this.isUsingDefaults = true\n const aclDefaultStore = adoptACLDefault(this.targetDoc, targetACLDoc, defaultHolder, defaultACLDoc)\n this.mainCombo = new AccessGroups(targetDoc, targetACLDoc, this, aclDefaultStore, { defaults: this.isContainer })\n this.defaultsCombo = null\n this.defaultsDiffer = false\n } else {\n this.isUsingDefaults = false\n this.mainCombo = new AccessGroups(targetDoc, targetACLDoc, this, store)\n this.defaultsCombo = new AccessGroups(targetDoc, targetACLDoc, this, store, { defaults: this.isContainer })\n this.defaultsDiffer = !sameACL(this.mainCombo.aclMap, this.defaultsCombo.aclMap)\n }\n }\n\n public get isEditable (): boolean {\n return !this.isUsingDefaults\n }\n\n public render (): HTMLElement {\n this.rootElement.innerHTML = ''\n if (this.isUsingDefaults) {\n this.renderStatus(`The sharing for this ${this.noun} is the default for folder `)\n if (this.defaultHolder) {\n const defaultHolderLink = this.statusElement.appendChild(this.dom.createElement('a'))\n defaultHolderLink.href = this.defaultHolder.uri\n defaultHolderLink.innerText = shortNameForFolder(this.defaultHolder)\n }\n } else if (!this.defaultsDiffer && this.isContainer) {\n this.renderStatus('This is also the default for things in this folder.')\n } else {\n this.renderStatus('')\n }\n this.rootElement.appendChild(this.mainCombo.render())\n if (this.defaultsCombo && this.defaultsDiffer) {\n this.rootElement.appendChild(this.renderRemoveDefaultsController())\n this.rootElement.appendChild(this.defaultsCombo.render())\n } else if (this.isEditable && this.isContainer) {\n this.rootElement.appendChild(this.renderAddDefaultsController())\n }\n if (!this.targetIsProtected && this.isUsingDefaults) {\n this.rootElement.appendChild(this.renderAddAclsController())\n } else if (!this.targetIsProtected) {\n this.rootElement.appendChild(this.renderRemoveAclsController())\n }\n return this.rootElement\n }\n\n private renderRemoveAclsController (): HTMLElement {\n const useDefaultButton = this.dom.createElement('button')\n useDefaultButton.innerText = `Remove custom sharing settings for this ${this.noun} -- just use default${this.prospectiveDefaultHolder ? ` for ${utils.label(this.prospectiveDefaultHolder)}` : ''}`\n useDefaultButton.classList.add(this.classes.bigButton)\n useDefaultButton.addEventListener('click', () => this.removeAcls()\n .then(() => this.render())\n .catch(error => this.renderStatus(error)))\n return useDefaultButton\n }\n\n private renderAddAclsController (): HTMLElement {\n const addAclButton = this.dom.createElement('button')\n addAclButton.innerText = `Set specific sharing for this ${this.noun}`\n addAclButton.classList.add(this.classes.bigButton)\n addAclButton.addEventListener('click', () => this.addAcls()\n .then(() => this.render())\n .catch(error => this.renderStatus(error)))\n return addAclButton\n }\n\n private renderAddDefaultsController (): HTMLElement {\n const containerElement = this.dom.createElement('div')\n containerElement.classList.add(this.classes.defaultsController)\n\n const noticeElement = containerElement.appendChild(this.dom.createElement('div'))\n noticeElement.innerText = 'Sharing for things within the folder currently tracks sharing for the folder.'\n noticeElement.classList.add(this.classes.defaultsControllerNotice)\n\n const button = containerElement.appendChild(this.dom.createElement('button'))\n button.innerText = 'Set the sharing of folder contents separately from the sharing for the folder'\n button.classList.add(this.classes.bigButton)\n button.addEventListener('click', () => this.addDefaults()\n .then(() => this.render()))\n return containerElement\n }\n\n private renderRemoveDefaultsController (): HTMLElement {\n const containerElement = this.dom.createElement('div')\n containerElement.classList.add(this.classes.defaultsController)\n\n const noticeElement = containerElement.appendChild(this.dom.createElement('div'))\n noticeElement.innerText = 'Access to things within this folder:'\n noticeElement.classList.add(this.classes.defaultsControllerNotice)\n\n const button = containerElement.appendChild(this.dom.createElement('button'))\n button.innerText = 'Set default for folder contents to just track the sharing for the folder'\n button.classList.add(this.classes.bigButton)\n button.addEventListener('click', () => this.removeDefaults()\n .then(() => this.render())\n .catch(error => this.renderStatus(error)))\n return containerElement\n }\n\n public renderTemporaryStatus (message: string): void {\n // @@ TODO Introduce better system for error notification to user https://github.com/solidos/mashlib/issues/87\n this.statusElement.classList.add(this.classes.aclControlBoxStatusRevealed)\n this.statusElement.innerText = message\n this.statusElement.classList.add(this.classes.temporaryStatusInit)\n setTimeout(() => {\n this.statusElement.classList.add(this.classes.temporaryStatusEnd)\n })\n setTimeout(() => {\n this.statusElement.innerText = ''\n }, 5000)\n }\n\n public renderStatus (message: string): void {\n // @@ TODO Introduce better system for error notification to user https://github.com/solidos/mashlib/issues/87\n this.statusElement.classList.toggle(this.classes.aclControlBoxStatusRevealed, !!message)\n this.statusElement.innerText = message\n }\n\n private async addAcls (): Promise<void> {\n if (!this.defaultHolder || !this.defaultACLDoc) {\n const message = 'Unable to find defaults to copy'\n debug.error(message)\n return Promise.reject(message)\n }\n const aclGraph = adoptACLDefault(this.targetDoc, this.targetACLDoc, this.defaultHolder, this.defaultACLDoc)\n aclGraph.statements.forEach(st => this.store.add(st.subject, st.predicate, st.object, this.targetACLDoc))\n try {\n await this.store.fetcher.putBack(this.targetACLDoc)\n this.isUsingDefaults = false\n return Promise.resolve()\n } catch (error) {\n const message = ` Error writing back access control file! ${error}`\n debug.error(message)\n return Promise.reject(message)\n }\n }\n\n private async addDefaults (): Promise<void> {\n this.defaultsCombo = new AccessGroups(this.targetDoc, this.targetACLDoc, this, this.store, { defaults: true })\n this.defaultsDiffer = true\n }\n\n private async removeAcls (): Promise<void> {\n try {\n await this.store.fetcher.delete(this.targetACLDoc.uri, {})\n this.isUsingDefaults = true\n try {\n this.prospectiveDefaultHolder = await getProspectiveHolder(this.targetDoc.uri)\n } catch (error) {\n // No need to show this error in status, but good to warn about it in console\n debug.warn(error)\n }\n } catch (error) {\n const message = `Error deleting access control file: ${this.targetACLDoc}: ${error}`\n debug.error(message)\n return Promise.reject(message)\n }\n }\n\n private async removeDefaults (): Promise<void> {\n const fallbackCombo = this.defaultsCombo\n try {\n this.defaultsCombo = null\n this.defaultsDiffer = false\n await this.save()\n } catch (error) {\n this.defaultsCombo = fallbackCombo\n this.defaultsDiffer = true\n debug.error(error)\n return Promise.reject(error)\n }\n }\n\n public save (): Promise<void> {\n // build graph\n const newAClGraph = graph()\n if (!this.isContainer) {\n makeACLGraphbyCombo(newAClGraph, this.targetDoc, this.mainCombo.byCombo, this.targetACLDoc, true)\n } else if (this.defaultsCombo && this.defaultsDiffer) {\n // Pair of controls\n makeACLGraphbyCombo(newAClGraph, this.targetDoc, this.mainCombo.byCombo, this.targetACLDoc, true)\n makeACLGraphbyCombo(newAClGraph, this.targetDoc, this.defaultsCombo.byCombo, this.targetACLDoc, false, true)\n } else {\n // Linked controls\n makeACLGraphbyCombo(newAClGraph, this.targetDoc, this.mainCombo.byCombo, this.targetACLDoc, true, true)\n }\n\n // add authenticated fetcher\n newAClGraph.fetcher = fetcher(newAClGraph, { fetch: this.store.fetcher._fetch })\n const updater = newAClGraph.updater || new UpdateManager(newAClGraph)\n\n // save ACL resource\n return new Promise((resolve, reject) => {\n updater.put(\n this.targetACLDoc,\n newAClGraph.statementsMatching(undefined, undefined, undefined, this.targetACLDoc),\n 'text/turtle',\n (uri, ok, message) => {\n if (!ok) {\n return reject(new Error(`ACL file save failed: ${message}`))\n }\n this.store.fetcher.unload(this.targetACLDoc)\n this.store.add(newAClGraph.statements)\n this.store.fetcher.requested[this.targetACLDoc.uri] = 'done' // missing: save headers\n this.mainCombo.store = this.store\n if (this.defaultsCombo) {\n this.defaultsCombo.store = this.store\n }\n this.defaultsDiffer = !!this.defaultsCombo && !sameACL(this.mainCombo.aclMap, this.defaultsCombo.aclMap)\n debug.log('ACL modification: success!')\n resolve()\n }\n )\n })\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"access-controller.js","names":["AccessController","subject","noun","context","statusElement","classes","targetIsProtected","targetDoc","targetACLDoc","defaultHolder","defaultACLDoc","prospectiveDefaultHolder","store","dom","rootElement","createElement","classList","add","aclGroupContent","isContainer","uri","slice","isUsingDefaults","aclDefaultStore","adoptACLDefault","mainCombo","AccessGroups","defaults","defaultsCombo","defaultsDiffer","sameACL","aclMap","innerHTML","renderStatus","defaultHolderLink","appendChild","href","innerText","shortNameForFolder","render","renderRemoveDefaultsController","isEditable","renderAddDefaultsController","renderAddAclsController","renderRemoveAclsController","useDefaultButton","utils","label","bigButton","addEventListener","removeAcls","then","error","addAclButton","addAcls","containerElement","defaultsController","noticeElement","defaultsControllerNotice","button","addDefaults","removeDefaults","message","aclControlBoxStatusRevealed","temporaryStatusInit","setTimeout","temporaryStatusEnd","toggle","debug","Promise","reject","aclGraph","statements","forEach","st","predicate","object","fetcher","putBack","resolve","getProspectiveHolder","warn","fallbackCombo","save","newAClGraph","graph","makeACLGraphbyCombo","byCombo","fetch","_fetch","updater","UpdateManager","put","statementsMatching","undefined","ok","Error","unload","requested","log"],"sources":["../../src/acl/access-controller.ts"],"sourcesContent":["/**\n * Contains the [[AccessController]] class\n * @packageDocumentation\n */\n\nimport { adoptACLDefault, getProspectiveHolder, makeACLGraphbyCombo, sameACL } from './acl'\nimport { fetcher, graph, NamedNode, UpdateManager } from 'rdflib'\nimport { AccessGroups } from './access-groups'\nimport { DataBrowserContext } from 'pane-registry'\nimport { shortNameForFolder } from './acl-control'\nimport * as utils from '../utils'\nimport * as debug from '../debug'\n\n/**\n * Rendered HTML component used in the databrowser's Sharing pane.\n */\nexport class AccessController {\n public mainCombo: AccessGroups\n public defaultsCombo: AccessGroups | null\n private readonly isContainer: boolean\n private defaultsDiffer: boolean\n private readonly rootElement: HTMLElement\n private isUsingDefaults: boolean\n\n constructor (\n public subject: NamedNode,\n public noun: string,\n public context: DataBrowserContext,\n private statusElement: HTMLElement,\n public classes: Record<string, string>,\n public targetIsProtected: boolean,\n private targetDoc: NamedNode,\n private targetACLDoc: NamedNode,\n private defaultHolder: NamedNode | null,\n private defaultACLDoc: NamedNode | null,\n private prospectiveDefaultHolder: NamedNode | undefined,\n public store,\n public dom\n ) {\n this.rootElement = dom.createElement('div')\n this.rootElement.classList.add(classes.aclGroupContent)\n this.isContainer = targetDoc.uri.slice(-1) === '/' // Give default for all directories\n if (defaultHolder && defaultACLDoc) {\n this.isUsingDefaults = true\n const aclDefaultStore = adoptACLDefault(this.targetDoc, targetACLDoc, defaultHolder, defaultACLDoc)\n this.mainCombo = new AccessGroups(targetDoc, targetACLDoc, this, aclDefaultStore, { defaults: this.isContainer })\n this.defaultsCombo = null\n this.defaultsDiffer = false\n } else {\n this.isUsingDefaults = false\n this.mainCombo = new AccessGroups(targetDoc, targetACLDoc, this, store)\n this.defaultsCombo = new AccessGroups(targetDoc, targetACLDoc, this, store, { defaults: this.isContainer })\n this.defaultsDiffer = !sameACL(this.mainCombo.aclMap, this.defaultsCombo.aclMap)\n }\n }\n\n public get isEditable (): boolean {\n return !this.isUsingDefaults\n }\n\n public render (): HTMLElement {\n this.rootElement.innerHTML = ''\n if (this.isUsingDefaults) {\n this.renderStatus(`The sharing for this ${this.noun} is the default for folder `)\n if (this.defaultHolder) {\n const defaultHolderLink = this.statusElement.appendChild(this.dom.createElement('a'))\n defaultHolderLink.href = this.defaultHolder.uri\n defaultHolderLink.innerText = shortNameForFolder(this.defaultHolder)\n }\n } else if (!this.defaultsDiffer && this.isContainer) {\n this.renderStatus('This is also the default for things in this folder.')\n } else {\n this.renderStatus('')\n }\n this.rootElement.appendChild(this.mainCombo.render())\n if (this.defaultsCombo && this.defaultsDiffer) {\n this.rootElement.appendChild(this.renderRemoveDefaultsController())\n this.rootElement.appendChild(this.defaultsCombo.render())\n } else if (this.isEditable && this.isContainer) {\n this.rootElement.appendChild(this.renderAddDefaultsController())\n }\n if (!this.targetIsProtected && this.isUsingDefaults) {\n this.rootElement.appendChild(this.renderAddAclsController())\n } else if (!this.targetIsProtected) {\n this.rootElement.appendChild(this.renderRemoveAclsController())\n }\n return this.rootElement\n }\n\n private renderRemoveAclsController (): HTMLElement {\n const useDefaultButton = this.dom.createElement('button')\n useDefaultButton.innerText = `Remove custom sharing settings for this ${this.noun} -- just use default${this.prospectiveDefaultHolder ? ` for ${utils.label(this.prospectiveDefaultHolder)}` : ''}`\n useDefaultButton.classList.add(this.classes.bigButton)\n useDefaultButton.addEventListener('click', () => this.removeAcls()\n .then(() => this.render())\n .catch(error => this.renderStatus(error)))\n return useDefaultButton\n }\n\n private renderAddAclsController (): HTMLElement {\n const addAclButton = this.dom.createElement('button')\n addAclButton.innerText = `Set specific sharing for this ${this.noun}`\n addAclButton.classList.add(this.classes.bigButton)\n addAclButton.addEventListener('click', () => this.addAcls()\n .then(() => this.render())\n .catch(error => this.renderStatus(error)))\n return addAclButton\n }\n\n private renderAddDefaultsController (): HTMLElement {\n const containerElement = this.dom.createElement('div')\n containerElement.classList.add(this.classes.defaultsController)\n\n const noticeElement = containerElement.appendChild(this.dom.createElement('div'))\n noticeElement.innerText = 'Sharing for things within the folder currently tracks sharing for the folder.'\n noticeElement.classList.add(this.classes.defaultsControllerNotice)\n\n const button = containerElement.appendChild(this.dom.createElement('button'))\n button.innerText = 'Set the sharing of folder contents separately from the sharing for the folder'\n button.classList.add(this.classes.bigButton)\n button.addEventListener('click', () => this.addDefaults()\n .then(() => this.render()))\n return containerElement\n }\n\n private renderRemoveDefaultsController (): HTMLElement {\n const containerElement = this.dom.createElement('div')\n containerElement.classList.add(this.classes.defaultsController)\n\n const noticeElement = containerElement.appendChild(this.dom.createElement('div'))\n noticeElement.innerText = 'Access to things within this folder:'\n noticeElement.classList.add(this.classes.defaultsControllerNotice)\n\n const button = containerElement.appendChild(this.dom.createElement('button'))\n button.innerText = 'Set default for folder contents to just track the sharing for the folder'\n button.classList.add(this.classes.bigButton)\n button.addEventListener('click', () => this.removeDefaults()\n .then(() => this.render())\n .catch(error => this.renderStatus(error)))\n return containerElement\n }\n\n public renderTemporaryStatus (message: string): void {\n // @@ TODO Introduce better system for error notification to user https://github.com/solidos/mashlib/issues/87\n this.statusElement.classList.add(this.classes.aclControlBoxStatusRevealed)\n this.statusElement.innerText = message\n this.statusElement.classList.add(this.classes.temporaryStatusInit)\n setTimeout(() => {\n this.statusElement.classList.add(this.classes.temporaryStatusEnd)\n })\n setTimeout(() => {\n this.statusElement.innerText = ''\n }, 5000)\n }\n\n public renderStatus (message: string): void {\n // @@ TODO Introduce better system for error notification to user https://github.com/solidos/mashlib/issues/87\n this.statusElement.classList.toggle(this.classes.aclControlBoxStatusRevealed, !!message)\n this.statusElement.innerText = message\n }\n\n private async addAcls (): Promise<void> {\n if (!this.defaultHolder || !this.defaultACLDoc) {\n const message = 'Unable to find defaults to copy'\n debug.error(message)\n return Promise.reject(message)\n }\n const aclGraph = adoptACLDefault(this.targetDoc, this.targetACLDoc, this.defaultHolder, this.defaultACLDoc)\n aclGraph.statements.forEach(st => this.store.add(st.subject, st.predicate, st.object, this.targetACLDoc))\n try {\n await this.store.fetcher.putBack(this.targetACLDoc)\n this.isUsingDefaults = false\n return Promise.resolve()\n } catch (error) {\n const message = ` Error writing back access control file! ${error}`\n debug.error(message)\n return Promise.reject(message)\n }\n }\n\n private async addDefaults (): Promise<void> {\n this.defaultsCombo = new AccessGroups(this.targetDoc, this.targetACLDoc, this, this.store, { defaults: true })\n this.defaultsDiffer = true\n }\n\n private async removeAcls (): Promise<void> {\n try {\n await this.store.fetcher.delete(this.targetACLDoc.uri, {})\n this.isUsingDefaults = true\n try {\n this.prospectiveDefaultHolder = await getProspectiveHolder(this.targetDoc.uri)\n } catch (error) {\n // No need to show this error in status, but good to warn about it in console\n debug.warn(error)\n }\n } catch (error) {\n const message = `Error deleting access control file: ${this.targetACLDoc}: ${error}`\n debug.error(message)\n return Promise.reject(message)\n }\n }\n\n private async removeDefaults (): Promise<void> {\n const fallbackCombo = this.defaultsCombo\n try {\n this.defaultsCombo = null\n this.defaultsDiffer = false\n await this.save()\n } catch (error) {\n this.defaultsCombo = fallbackCombo\n this.defaultsDiffer = true\n debug.error(error)\n return Promise.reject(error)\n }\n }\n\n public save (): Promise<void> {\n // build graph\n const newAClGraph = graph()\n if (!this.isContainer) {\n makeACLGraphbyCombo(newAClGraph, this.targetDoc, this.mainCombo.byCombo, this.targetACLDoc, true)\n } else if (this.defaultsCombo && this.defaultsDiffer) {\n // Pair of controls\n makeACLGraphbyCombo(newAClGraph, this.targetDoc, this.mainCombo.byCombo, this.targetACLDoc, true)\n makeACLGraphbyCombo(newAClGraph, this.targetDoc, this.defaultsCombo.byCombo, this.targetACLDoc, false, true)\n } else {\n // Linked controls\n makeACLGraphbyCombo(newAClGraph, this.targetDoc, this.mainCombo.byCombo, this.targetACLDoc, true, true)\n }\n\n // add authenticated fetcher\n newAClGraph.fetcher = fetcher(newAClGraph, { fetch: this.store.fetcher._fetch })\n const updater = newAClGraph.updater || new UpdateManager(newAClGraph)\n\n // save ACL resource\n return new Promise((resolve, reject) => {\n updater.put(\n this.targetACLDoc,\n newAClGraph.statementsMatching(undefined, undefined, undefined, this.targetACLDoc),\n 'text/turtle',\n (uri, ok, message) => {\n if (!ok) {\n return reject(new Error(`ACL file save failed: ${message}`))\n }\n this.store.fetcher.unload(this.targetACLDoc)\n this.store.add(newAClGraph.statements)\n this.store.fetcher.requested[this.targetACLDoc.uri] = 'done' // missing: save headers\n this.mainCombo.store = this.store\n if (this.defaultsCombo) {\n this.defaultsCombo.store = this.store\n }\n this.defaultsDiffer = !!this.defaultsCombo && !sameACL(this.mainCombo.aclMap, this.defaultsCombo.aclMap)\n debug.log('ACL modification: success!')\n resolve()\n }\n )\n })\n }\n}\n"],"mappings":"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"}