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,9 +1,7 @@
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
  });
@@ -13,37 +11,27 @@ exports.preventBrowserDropEvents = preventBrowserDropEvents;
13
11
  exports.preventDrag = preventDrag;
14
12
  exports.setGlobalWindow = setGlobalWindow;
15
13
  exports.shortNameForFolder = shortNameForFolder;
16
-
17
14
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
18
-
19
15
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
20
-
21
16
  var ns = _interopRequireWildcard(require("../ns"));
22
-
23
17
  var utils = _interopRequireWildcard(require("../utils"));
24
-
25
18
  var _acl = require("./acl");
26
-
27
19
  var _accessController = require("./access-controller");
28
-
29
20
  var _jss = require("../jss");
30
-
31
21
  var _styles = require("./styles");
32
-
33
22
  var _debug = require("../debug");
34
-
35
23
  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); }
36
-
37
24
  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; }
38
-
39
25
  /**
40
26
  * Functions for rendering the ACL User Interface.
41
27
  * See https://github.com/solidos/userguide/blob/main/views/sharing/userguide.md#view
42
28
  * for a screenshot.
43
29
  * @packageDocumentation
44
30
  */
31
+
45
32
  var global = window;
46
33
  var preventBrowserDropEventsDone = Symbol('prevent double triggering of drop event');
34
+
47
35
  /**
48
36
  * See https://coshx.com/preventing-drag-and-drop-disasters-with-a-chrome-userscript
49
37
  * Without this dropping anything onto a browser page will cause chrome etc to jump to diff page
@@ -56,29 +44,24 @@ var preventBrowserDropEventsDone = Symbol('prevent double triggering of drop eve
56
44
  * @param document The DOM
57
45
  * @returns void
58
46
  */
59
-
60
47
  function preventBrowserDropEvents(document) {
61
48
  (0, _debug.log)('preventBrowserDropEvents called.');
62
-
63
49
  if (typeof global !== 'undefined') {
64
50
  if (global[preventBrowserDropEventsDone]) return;
65
51
  global[preventBrowserDropEventsDone] = true;
66
52
  }
67
-
68
53
  document.addEventListener('drop', handleDrop, false);
69
54
  document.addEventListener('dragenter', preventDrag, false);
70
55
  document.addEventListener('dragover', preventDrag, false);
71
56
  }
72
- /** @internal */
73
-
74
57
 
58
+ /** @internal */
75
59
  function preventDrag(e) {
76
60
  e.stopPropagation();
77
61
  e.preventDefault();
78
62
  }
79
- /** @internal */
80
-
81
63
 
64
+ /** @internal */
82
65
  function handleDrop(e) {
83
66
  if (e.dataTransfer.files.length > 0) {
84
67
  if (!global.confirm('Are you sure you want to drop this file here? (Cancel opens it in a new tab)')) {
@@ -88,6 +71,7 @@ function handleDrop(e) {
88
71
  }
89
72
  }
90
73
  }
74
+
91
75
  /**
92
76
  * Get a folder's own filename in the directory tree. Also works for
93
77
  * domain names; the URL protocol ('https://') acts as the tree root
@@ -119,29 +103,27 @@ function handleDrop(e) {
119
103
  * @param x RDF Node for the folder URL
120
104
  * @returns Short name for the folder
121
105
  */
122
-
123
-
124
106
  function shortNameForFolder(x) {
125
- var str = x.uri; // Strip the trailing slash
107
+ var str = x.uri;
126
108
 
109
+ // Strip the trailing slash
127
110
  if (str.slice(-1) === '/') {
128
111
  str = str.slice(0, -1);
129
- } // Remove the path if present, keeping only the part
130
- // after the last slash.
131
-
112
+ }
132
113
 
114
+ // Remove the path if present, keeping only the part
115
+ // after the last slash.
133
116
  var slash = str.lastIndexOf('/');
134
-
135
117
  if (slash >= 0) {
136
118
  str = str.slice(slash + 1);
137
- } // Return the folder's filename, or '/' if nothing found
119
+ }
120
+ // Return the folder's filename, or '/' if nothing found
138
121
  // (but see https://github.com/solidos/solid-ui/issues/196
139
122
  // regarding whether this happens at the domain root or
140
123
  // not)
141
-
142
-
143
124
  return str || '/';
144
125
  }
126
+
145
127
  /**
146
128
  * A wrapper that retrieves ACL data and uses it
147
129
  * to render an [[AccessController]] component.
@@ -150,12 +132,9 @@ function shortNameForFolder(x) {
150
132
  * when it was introduced into solid-ui in
151
133
  * https://github.com/solidos/solid-ui/commit/948b874bd93e7bf5160e6e224821b888f07d15f3#diff-4192a29f38a0ababd563b36b47eba5bbR54
152
134
  */
153
-
154
-
155
135
  function ACLControlBox5(subject, context, noun, kb) {
156
136
  var dom = context.dom;
157
137
  var doc = subject.doc(); // The ACL is actually to the doc describing the thing
158
-
159
138
  var classes = (0, _jss.getClasses)(dom.head, _styles.styles).classes;
160
139
  var container = dom.createElement('div');
161
140
  container.classList.add(classes.aclControlBoxContainer);
@@ -164,7 +143,6 @@ function ACLControlBox5(subject, context, noun, kb) {
164
143
  header.classList.add(classes.aclControlBoxHeader);
165
144
  var status = container.appendChild(dom.createElement('div'));
166
145
  status.classList.add(classes.aclControlBoxStatus);
167
-
168
146
  try {
169
147
  loadController(doc, kb, subject, noun, context, classes, dom, status).then(function (controller) {
170
148
  return container.appendChild(controller.render());
@@ -172,14 +150,11 @@ function ACLControlBox5(subject, context, noun, kb) {
172
150
  } catch (error) {
173
151
  status.innerText = error;
174
152
  }
175
-
176
153
  return container;
177
154
  }
178
-
179
155
  function loadController(_x, _x2, _x3, _x4, _x5, _x6, _x7, _x8) {
180
156
  return _loadController.apply(this, arguments);
181
157
  }
182
-
183
158
  function _loadController() {
184
159
  _loadController = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2(doc, kb, subject, noun, context, classes, dom, status) {
185
160
  return _regenerator["default"].wrap(function _callee2$(_context2) {
@@ -197,40 +172,31 @@ function _loadController() {
197
172
  getController = function _getController(prospectiveDefaultHolder) {
198
173
  return new _accessController.AccessController(subject, noun, context, status, classes, targetIsProtected, targetDoc, targetACLDoc, defaultHolder, defaultACLDoc, prospectiveDefaultHolder, kb, dom);
199
174
  };
200
-
201
175
  if (ok) {
202
176
  _context.next = 3;
203
177
  break;
204
178
  }
205
-
206
179
  return _context.abrupt("return", reject(new Error("Error reading ".concat(isDirectACL ? '' : ' default ', "ACL. status ").concat(targetDoc, ": ").concat(targetACLDoc))));
207
-
208
180
  case 3:
209
181
  targetDirectory = getDirectory(targetDoc);
210
182
  targetIsProtected = isStorage(targetDoc, targetACLDoc, kb) || hasProtectedAcl(targetDoc);
211
-
212
183
  if (!(!targetIsProtected && targetDirectory)) {
213
184
  _context.next = 16;
214
185
  break;
215
186
  }
216
-
217
187
  _context.prev = 6;
218
188
  _context.next = 9;
219
189
  return (0, _acl.getProspectiveHolder)(targetDirectory);
220
-
221
190
  case 9:
222
191
  prospectiveDefaultHolder = _context.sent;
223
192
  return _context.abrupt("return", resolve(getController(prospectiveDefaultHolder)));
224
-
225
193
  case 13:
226
194
  _context.prev = 13;
227
195
  _context.t0 = _context["catch"](6);
228
196
  // No need to show this error in status, but good to warn about it in console
229
197
  (0, _debug.warn)(_context.t0);
230
-
231
198
  case 16:
232
199
  return _context.abrupt("return", resolve(getController()));
233
-
234
200
  case 17:
235
201
  case "end":
236
202
  return _context.stop();
@@ -238,13 +204,11 @@ function _loadController() {
238
204
  }
239
205
  }, _callee, null, [[6, 13]]);
240
206
  }));
241
-
242
207
  return function (_x9, _x10, _x11, _x12, _x13, _x14) {
243
208
  return _ref.apply(this, arguments);
244
209
  };
245
210
  }());
246
211
  }));
247
-
248
212
  case 1:
249
213
  case "end":
250
214
  return _context2.stop();
@@ -254,29 +218,25 @@ function _loadController() {
254
218
  }));
255
219
  return _loadController.apply(this, arguments);
256
220
  }
257
-
258
221
  function getDirectory(doc) {
259
222
  var str = doc.uri.split('#')[0];
260
223
  var p = str.slice(0, -1).lastIndexOf('/');
261
224
  var q = str.indexOf('//');
262
225
  return q >= 0 && p < q + 2 || p < 0 ? null : str.slice(0, p + 1);
263
226
  }
264
-
265
227
  function isStorage(doc, aclDoc, store) {
266
228
  // @@ TODO: The methods used for targetIsStorage are HACKs - it should not be relied upon, and work is
267
229
  // @@ underway to standardize a behavior that does not rely upon this hack
268
230
  // @@ hopefully fixed as part of https://github.com/solidos/data-interoperability-panel/issues/10
269
231
  return store.holds(doc, ns.rdf('type'), ns.space('Storage'), aclDoc);
270
232
  }
271
-
272
233
  function hasProtectedAcl(targetDoc) {
273
234
  // @@ TODO: This is hacky way of knowing whether or not a certain ACL file can be removed
274
235
  // Hopefully we'll find a better, standardized solution to this - https://github.com/solidos/specification/issues/37
275
236
  return targetDoc.uri === targetDoc.site().uri;
276
237
  }
277
- /** @internal */
278
-
279
238
 
239
+ /** @internal */
280
240
  function setGlobalWindow(window) {
281
241
  global = window;
282
242
  }
@@ -1 +1 @@
1
- {"version":3,"file":"acl-control.js","names":["global","window","preventBrowserDropEventsDone","Symbol","preventBrowserDropEvents","document","log","addEventListener","handleDrop","preventDrag","e","stopPropagation","preventDefault","dataTransfer","files","length","confirm","dropEffect","shortNameForFolder","x","str","uri","slice","slash","lastIndexOf","ACLControlBox5","subject","context","noun","kb","dom","doc","classes","getClasses","head","styles","container","createElement","classList","add","aclControlBoxContainer","header","appendChild","textContent","utils","label","aclControlBoxHeader","status","aclControlBoxStatus","loadController","then","controller","render","error","innerText","Promise","resolve","reject","getACLorDefault","ok","isDirectACL","targetDoc","targetACLDoc","defaultHolder","defaultACLDoc","getController","prospectiveDefaultHolder","AccessController","targetIsProtected","Error","targetDirectory","getDirectory","isStorage","hasProtectedAcl","getProspectiveHolder","warn","split","p","q","indexOf","aclDoc","store","holds","ns","rdf","space","site","setGlobalWindow"],"sources":["../../src/acl/acl-control.ts"],"sourcesContent":["/**\n * Functions for rendering the ACL User Interface.\n * See https://github.com/solidos/userguide/blob/main/views/sharing/userguide.md#view\n * for a screenshot.\n * @packageDocumentation\n */\n\nimport * as ns from '../ns'\nimport * as utils from '../utils'\nimport { getACLorDefault, getProspectiveHolder } from './acl'\nimport { Store, NamedNode } from 'rdflib'\nimport { DataBrowserContext } from 'pane-registry'\nimport { AccessController } from './access-controller'\nimport { getClasses } from '../jss'\nimport { styles } from './styles'\nimport { log, warn } from '../debug'\n\nlet global: Window = window\nconst preventBrowserDropEventsDone = Symbol('prevent double triggering of drop event')\n\n/**\n * See https://coshx.com/preventing-drag-and-drop-disasters-with-a-chrome-userscript\n * Without this dropping anything onto a browser page will cause chrome etc to jump to diff page\n * throwing away all the user's work.\n *\n * In apps which may use drag and drop, this utility takes care of the fact\n * by default in a browser, an uncaught user drop into a browser window\n * causes the browser to lose all its work in that window and navigate to another page\n *\n * @param document The DOM\n * @returns void\n */\nexport function preventBrowserDropEvents (document: HTMLDocument): void {\n log('preventBrowserDropEvents called.')\n if (typeof global !== 'undefined') {\n if (global[preventBrowserDropEventsDone]) return\n global[preventBrowserDropEventsDone] = true\n }\n\n document.addEventListener('drop', handleDrop, false)\n document.addEventListener('dragenter', preventDrag, false)\n document.addEventListener('dragover', preventDrag, false)\n}\n\n/** @internal */\nexport function preventDrag (e) {\n e.stopPropagation()\n e.preventDefault()\n}\n\n/** @internal */\nexport function handleDrop (e) {\n if (e.dataTransfer.files.length > 0) {\n if (\n !global.confirm('Are you sure you want to drop this file here? (Cancel opens it in a new tab)')\n ) {\n e.stopPropagation()\n e.preventDefault()\n log('@@@@ document-level DROP suppressed: ' + e.dataTransfer.dropEffect\n )\n }\n }\n}\n\n/**\n * Get a folder's own filename in the directory tree. Also works for\n * domain names; the URL protocol ('https://') acts as the tree root\n * with short name '/' (see also test/unit/acl/acl-control.test.ts).\n *\n * ```typescript\n * shortNameForFolder($rdf.namedNode('http://example.com/some/folder/'))\n * // 'folder'\n *\n * shortNameForFolder($rdf.namedNode('http://example.com/some/folder'))\n * // 'folder'\n *\n * shortNameForFolder($rdf.namedNode('http://example.com/'))\n * // 'example.com'\n *\n * shortNameForFolder($rdf.namedNode('http://example.com'))\n * // 'example.com'\n *\n * shortNameForFolder($rdf.namedNode('http://'))\n * // '/'\n * ```\n *\n * It also works with relative URLs:\n * ```typescript\n * shortNameForFolder($rdf.namedNode('../folder/'))\n * // 'folder'\n * ```\n *\n * @param x RDF Node for the folder URL\n * @returns Short name for the folder\n */\nexport function shortNameForFolder (x: NamedNode): string {\n let str = x.uri\n\n // Strip the trailing slash\n if (str.slice(-1) === '/') {\n str = str.slice(0, -1)\n }\n\n // Remove the path if present, keeping only the part\n // after the last slash.\n const slash = str.lastIndexOf('/')\n if (slash >= 0) {\n str = str.slice(slash + 1)\n }\n // Return the folder's filename, or '/' if nothing found\n // (but see https://github.com/solidos/solid-ui/issues/196\n // regarding whether this happens at the domain root or\n // not)\n return str || '/'\n}\n\n/**\n * A wrapper that retrieves ACL data and uses it\n * to render an [[AccessController]] component.\n * Presumably the '5' is a version number of some sort,\n * but all we know is it was already called ACLControlBox5\n * when it was introduced into solid-ui in\n * https://github.com/solidos/solid-ui/commit/948b874bd93e7bf5160e6e224821b888f07d15f3#diff-4192a29f38a0ababd563b36b47eba5bbR54\n */\nexport function ACLControlBox5 (\n subject: NamedNode,\n context: DataBrowserContext,\n noun: string,\n kb: Store\n): HTMLElement {\n const dom = context.dom\n const doc = subject.doc() // The ACL is actually to the doc describing the thing\n const classes = getClasses(dom.head, styles).classes\n\n const container = dom.createElement('div')\n container.classList.add(classes.aclControlBoxContainer)\n\n const header = container.appendChild(dom.createElement('h1'))\n header.textContent = `Sharing for ${noun} ${utils.label(subject)}`\n header.classList.add(classes.aclControlBoxHeader)\n\n const status = container.appendChild(dom.createElement('div'))\n status.classList.add(classes.aclControlBoxStatus)\n\n try {\n loadController(doc, kb, subject, noun, context, classes, dom, status)\n .then(controller => container.appendChild(controller.render()))\n } catch (error) {\n status.innerText = error\n }\n\n return container\n}\n\nasync function loadController (\n doc: NamedNode,\n kb: Store,\n subject: NamedNode,\n noun: string,\n context: DataBrowserContext,\n classes: Record<string, string>,\n dom: HTMLDocument,\n status: HTMLElement\n): Promise<AccessController> {\n return new Promise((resolve, reject) => getACLorDefault(doc, async (\n ok,\n isDirectACL,\n targetDoc,\n targetACLDoc,\n defaultHolder,\n defaultACLDoc\n ) => {\n if (!ok) {\n return reject(new Error(`Error reading ${isDirectACL ? '' : ' default '}ACL. status ${targetDoc}: ${targetACLDoc}`))\n }\n const targetDirectory = getDirectory(targetDoc as NamedNode)\n const targetIsProtected = isStorage(targetDoc as NamedNode, targetACLDoc as NamedNode, kb) || hasProtectedAcl(targetDoc as NamedNode)\n if (!targetIsProtected && targetDirectory) {\n try {\n const prospectiveDefaultHolder = await getProspectiveHolder(targetDirectory)\n return resolve(getController(prospectiveDefaultHolder))\n } catch (error) {\n // No need to show this error in status, but good to warn about it in console\n warn(error)\n }\n }\n return resolve(getController())\n\n function getController (prospectiveDefaultHolder?: NamedNode) {\n return new AccessController(subject, noun, context, status, classes, targetIsProtected, targetDoc as NamedNode, targetACLDoc as NamedNode, defaultHolder as NamedNode,\n defaultACLDoc as NamedNode, prospectiveDefaultHolder, kb, dom)\n }\n }))\n}\n\nfunction getDirectory (doc: NamedNode): string | null {\n const str = doc.uri.split('#')[0]\n const p = str.slice(0, -1).lastIndexOf('/')\n const q = str.indexOf('//')\n return (q >= 0 && p < q + 2) || p < 0 ? null : str.slice(0, p + 1)\n}\n\nfunction isStorage (doc: NamedNode, aclDoc: NamedNode, store: Store): boolean {\n // @@ TODO: The methods used for targetIsStorage are HACKs - it should not be relied upon, and work is\n // @@ underway to standardize a behavior that does not rely upon this hack\n // @@ hopefully fixed as part of https://github.com/solidos/data-interoperability-panel/issues/10\n return store.holds(doc, ns.rdf('type'), ns.space('Storage'), aclDoc)\n}\n\nfunction hasProtectedAcl (targetDoc: NamedNode): boolean {\n // @@ TODO: This is hacky way of knowing whether or not a certain ACL file can be removed\n // Hopefully we'll find a better, standardized solution to this - https://github.com/solidos/specification/issues/37\n return targetDoc.uri === targetDoc.site().uri\n}\n\n/** @internal */\nexport function setGlobalWindow (window: Window) {\n global = window\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"acl-control.js","names":["global","window","preventBrowserDropEventsDone","Symbol","preventBrowserDropEvents","document","log","addEventListener","handleDrop","preventDrag","e","stopPropagation","preventDefault","dataTransfer","files","length","confirm","dropEffect","shortNameForFolder","x","str","uri","slice","slash","lastIndexOf","ACLControlBox5","subject","context","noun","kb","dom","doc","classes","getClasses","head","styles","container","createElement","classList","add","aclControlBoxContainer","header","appendChild","textContent","utils","label","aclControlBoxHeader","status","aclControlBoxStatus","loadController","then","controller","render","error","innerText","Promise","resolve","reject","getACLorDefault","ok","isDirectACL","targetDoc","targetACLDoc","defaultHolder","defaultACLDoc","getController","prospectiveDefaultHolder","AccessController","targetIsProtected","Error","targetDirectory","getDirectory","isStorage","hasProtectedAcl","getProspectiveHolder","warn","split","p","q","indexOf","aclDoc","store","holds","ns","rdf","space","site","setGlobalWindow"],"sources":["../../src/acl/acl-control.ts"],"sourcesContent":["/**\n * Functions for rendering the ACL User Interface.\n * See https://github.com/solidos/userguide/blob/main/views/sharing/userguide.md#view\n * for a screenshot.\n * @packageDocumentation\n */\n\nimport * as ns from '../ns'\nimport * as utils from '../utils'\nimport { getACLorDefault, getProspectiveHolder } from './acl'\nimport { Store, NamedNode } from 'rdflib'\nimport { DataBrowserContext } from 'pane-registry'\nimport { AccessController } from './access-controller'\nimport { getClasses } from '../jss'\nimport { styles } from './styles'\nimport { log, warn } from '../debug'\n\nlet global: Window = window\nconst preventBrowserDropEventsDone = Symbol('prevent double triggering of drop event')\n\n/**\n * See https://coshx.com/preventing-drag-and-drop-disasters-with-a-chrome-userscript\n * Without this dropping anything onto a browser page will cause chrome etc to jump to diff page\n * throwing away all the user's work.\n *\n * In apps which may use drag and drop, this utility takes care of the fact\n * by default in a browser, an uncaught user drop into a browser window\n * causes the browser to lose all its work in that window and navigate to another page\n *\n * @param document The DOM\n * @returns void\n */\nexport function preventBrowserDropEvents (document: HTMLDocument): void {\n log('preventBrowserDropEvents called.')\n if (typeof global !== 'undefined') {\n if (global[preventBrowserDropEventsDone]) return\n global[preventBrowserDropEventsDone] = true\n }\n\n document.addEventListener('drop', handleDrop, false)\n document.addEventListener('dragenter', preventDrag, false)\n document.addEventListener('dragover', preventDrag, false)\n}\n\n/** @internal */\nexport function preventDrag (e) {\n e.stopPropagation()\n e.preventDefault()\n}\n\n/** @internal */\nexport function handleDrop (e) {\n if (e.dataTransfer.files.length > 0) {\n if (\n !global.confirm('Are you sure you want to drop this file here? (Cancel opens it in a new tab)')\n ) {\n e.stopPropagation()\n e.preventDefault()\n log('@@@@ document-level DROP suppressed: ' + e.dataTransfer.dropEffect\n )\n }\n }\n}\n\n/**\n * Get a folder's own filename in the directory tree. Also works for\n * domain names; the URL protocol ('https://') acts as the tree root\n * with short name '/' (see also test/unit/acl/acl-control.test.ts).\n *\n * ```typescript\n * shortNameForFolder($rdf.namedNode('http://example.com/some/folder/'))\n * // 'folder'\n *\n * shortNameForFolder($rdf.namedNode('http://example.com/some/folder'))\n * // 'folder'\n *\n * shortNameForFolder($rdf.namedNode('http://example.com/'))\n * // 'example.com'\n *\n * shortNameForFolder($rdf.namedNode('http://example.com'))\n * // 'example.com'\n *\n * shortNameForFolder($rdf.namedNode('http://'))\n * // '/'\n * ```\n *\n * It also works with relative URLs:\n * ```typescript\n * shortNameForFolder($rdf.namedNode('../folder/'))\n * // 'folder'\n * ```\n *\n * @param x RDF Node for the folder URL\n * @returns Short name for the folder\n */\nexport function shortNameForFolder (x: NamedNode): string {\n let str = x.uri\n\n // Strip the trailing slash\n if (str.slice(-1) === '/') {\n str = str.slice(0, -1)\n }\n\n // Remove the path if present, keeping only the part\n // after the last slash.\n const slash = str.lastIndexOf('/')\n if (slash >= 0) {\n str = str.slice(slash + 1)\n }\n // Return the folder's filename, or '/' if nothing found\n // (but see https://github.com/solidos/solid-ui/issues/196\n // regarding whether this happens at the domain root or\n // not)\n return str || '/'\n}\n\n/**\n * A wrapper that retrieves ACL data and uses it\n * to render an [[AccessController]] component.\n * Presumably the '5' is a version number of some sort,\n * but all we know is it was already called ACLControlBox5\n * when it was introduced into solid-ui in\n * https://github.com/solidos/solid-ui/commit/948b874bd93e7bf5160e6e224821b888f07d15f3#diff-4192a29f38a0ababd563b36b47eba5bbR54\n */\nexport function ACLControlBox5 (\n subject: NamedNode,\n context: DataBrowserContext,\n noun: string,\n kb: Store\n): HTMLElement {\n const dom = context.dom\n const doc = subject.doc() // The ACL is actually to the doc describing the thing\n const classes = getClasses(dom.head, styles).classes\n\n const container = dom.createElement('div')\n container.classList.add(classes.aclControlBoxContainer)\n\n const header = container.appendChild(dom.createElement('h1'))\n header.textContent = `Sharing for ${noun} ${utils.label(subject)}`\n header.classList.add(classes.aclControlBoxHeader)\n\n const status = container.appendChild(dom.createElement('div'))\n status.classList.add(classes.aclControlBoxStatus)\n\n try {\n loadController(doc, kb, subject, noun, context, classes, dom, status)\n .then(controller => container.appendChild(controller.render()))\n } catch (error) {\n status.innerText = error\n }\n\n return container\n}\n\nasync function loadController (\n doc: NamedNode,\n kb: Store,\n subject: NamedNode,\n noun: string,\n context: DataBrowserContext,\n classes: Record<string, string>,\n dom: HTMLDocument,\n status: HTMLElement\n): Promise<AccessController> {\n return new Promise((resolve, reject) => getACLorDefault(doc, async (\n ok,\n isDirectACL,\n targetDoc,\n targetACLDoc,\n defaultHolder,\n defaultACLDoc\n ) => {\n if (!ok) {\n return reject(new Error(`Error reading ${isDirectACL ? '' : ' default '}ACL. status ${targetDoc}: ${targetACLDoc}`))\n }\n const targetDirectory = getDirectory(targetDoc as NamedNode)\n const targetIsProtected = isStorage(targetDoc as NamedNode, targetACLDoc as NamedNode, kb) || hasProtectedAcl(targetDoc as NamedNode)\n if (!targetIsProtected && targetDirectory) {\n try {\n const prospectiveDefaultHolder = await getProspectiveHolder(targetDirectory)\n return resolve(getController(prospectiveDefaultHolder))\n } catch (error) {\n // No need to show this error in status, but good to warn about it in console\n warn(error)\n }\n }\n return resolve(getController())\n\n function getController (prospectiveDefaultHolder?: NamedNode) {\n return new AccessController(subject, noun, context, status, classes, targetIsProtected, targetDoc as NamedNode, targetACLDoc as NamedNode, defaultHolder as NamedNode,\n defaultACLDoc as NamedNode, prospectiveDefaultHolder, kb, dom)\n }\n }))\n}\n\nfunction getDirectory (doc: NamedNode): string | null {\n const str = doc.uri.split('#')[0]\n const p = str.slice(0, -1).lastIndexOf('/')\n const q = str.indexOf('//')\n return (q >= 0 && p < q + 2) || p < 0 ? null : str.slice(0, p + 1)\n}\n\nfunction isStorage (doc: NamedNode, aclDoc: NamedNode, store: Store): boolean {\n // @@ TODO: The methods used for targetIsStorage are HACKs - it should not be relied upon, and work is\n // @@ underway to standardize a behavior that does not rely upon this hack\n // @@ hopefully fixed as part of https://github.com/solidos/data-interoperability-panel/issues/10\n return store.holds(doc, ns.rdf('type'), ns.space('Storage'), aclDoc)\n}\n\nfunction hasProtectedAcl (targetDoc: NamedNode): boolean {\n // @@ TODO: This is hacky way of knowing whether or not a certain ACL file can be removed\n // Hopefully we'll find a better, standardized solution to this - https://github.com/solidos/specification/issues/37\n return targetDoc.uri === targetDoc.site().uri\n}\n\n/** @internal */\nexport function setGlobalWindow (window: Window) {\n global = window\n}\n"],"mappings":"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"}