solid-ui 2.4.18 → 2.4.19-0533393c

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 (265) hide show
  1. package/LICENSE.md +0 -0
  2. package/README.md +3 -2
  3. package/lib/acl/access-controller.d.ts +0 -0
  4. package/lib/acl/access-controller.d.ts.map +0 -0
  5. package/lib/acl/access-controller.js +0 -0
  6. package/lib/acl/access-controller.js.map +0 -0
  7. package/lib/acl/access-groups.d.ts +5 -4
  8. package/lib/acl/access-groups.d.ts.map +1 -1
  9. package/lib/acl/access-groups.js +1 -0
  10. package/lib/acl/access-groups.js.map +1 -1
  11. package/lib/acl/acl-control.d.ts +2 -2
  12. package/lib/acl/acl-control.d.ts.map +1 -1
  13. package/lib/acl/acl-control.js +0 -0
  14. package/lib/acl/acl-control.js.map +1 -1
  15. package/lib/acl/acl.d.ts +5 -5
  16. package/lib/acl/acl.d.ts.map +1 -1
  17. package/lib/acl/acl.js +2 -4
  18. package/lib/acl/acl.js.map +1 -1
  19. package/lib/acl/add-agent-buttons.d.ts +0 -0
  20. package/lib/acl/add-agent-buttons.d.ts.map +1 -1
  21. package/lib/acl/add-agent-buttons.js +5 -5
  22. package/lib/acl/add-agent-buttons.js.map +1 -1
  23. package/lib/acl/index.d.ts +0 -0
  24. package/lib/acl/index.d.ts.map +0 -0
  25. package/lib/acl/index.js +0 -0
  26. package/lib/acl/index.js.map +0 -0
  27. package/lib/acl/styles.d.ts +0 -0
  28. package/lib/acl/styles.d.ts.map +0 -0
  29. package/lib/acl/styles.js +0 -0
  30. package/lib/acl/styles.js.map +0 -0
  31. package/lib/acl/types.d.ts +0 -0
  32. package/lib/acl/types.d.ts.map +0 -0
  33. package/lib/acl/types.js +0 -0
  34. package/lib/acl/types.js.map +0 -0
  35. package/lib/chat/bookmarks.js +20 -22
  36. package/lib/chat/bookmarks.js.map +1 -1
  37. package/lib/chat/chatLogic.js +13 -15
  38. package/lib/chat/chatLogic.js.map +1 -1
  39. package/lib/chat/dateFolder.js +10 -10
  40. package/lib/chat/dateFolder.js.map +1 -1
  41. package/lib/chat/infinite.js +14 -16
  42. package/lib/chat/infinite.js.map +1 -1
  43. package/lib/chat/message.js +19 -23
  44. package/lib/chat/message.js.map +1 -1
  45. package/lib/chat/messageTools.js +16 -21
  46. package/lib/chat/messageTools.js.map +1 -1
  47. package/lib/chat/thread.js +24 -24
  48. package/lib/chat/thread.js.map +1 -1
  49. package/lib/create/create.d.ts +0 -0
  50. package/lib/create/create.d.ts.map +1 -1
  51. package/lib/create/create.js +9 -9
  52. package/lib/create/create.js.map +1 -1
  53. package/lib/create/index.d.ts +0 -0
  54. package/lib/create/index.d.ts.map +0 -0
  55. package/lib/create/index.js +0 -0
  56. package/lib/create/index.js.map +0 -0
  57. package/lib/create/types.d.ts +0 -0
  58. package/lib/create/types.d.ts.map +0 -0
  59. package/lib/create/types.js +0 -0
  60. package/lib/create/types.js.map +0 -0
  61. package/lib/debug.d.ts +0 -0
  62. package/lib/debug.d.ts.map +0 -0
  63. package/lib/debug.js +0 -0
  64. package/lib/debug.js.map +0 -0
  65. package/lib/folders.js +2 -6
  66. package/lib/folders.js.map +1 -1
  67. package/lib/footer/index.d.ts +4 -4
  68. package/lib/footer/index.d.ts.map +1 -1
  69. package/lib/footer/index.js +4 -4
  70. package/lib/footer/index.js.map +1 -1
  71. package/lib/footer/styleMap.d.ts +0 -0
  72. package/lib/footer/styleMap.d.ts.map +0 -0
  73. package/lib/footer/styleMap.js +0 -0
  74. package/lib/footer/styleMap.js.map +0 -0
  75. package/lib/header/empty-profile.d.ts +0 -0
  76. package/lib/header/empty-profile.d.ts.map +0 -0
  77. package/lib/header/empty-profile.js +0 -0
  78. package/lib/header/empty-profile.js.map +0 -0
  79. package/lib/header/index.d.ts +0 -0
  80. package/lib/header/index.d.ts.map +1 -1
  81. package/lib/header/index.js +11 -8
  82. package/lib/header/index.js.map +1 -1
  83. package/lib/header/styleMap.d.ts +0 -0
  84. package/lib/header/styleMap.d.ts.map +0 -0
  85. package/lib/header/styleMap.js +0 -0
  86. package/lib/header/styleMap.js.map +0 -0
  87. package/lib/iconBase.d.ts +0 -0
  88. package/lib/iconBase.d.ts.map +0 -0
  89. package/lib/iconBase.js +0 -0
  90. package/lib/iconBase.js.map +0 -0
  91. package/lib/icons/solid_logo.d.ts +0 -0
  92. package/lib/icons/solid_logo.d.ts.map +0 -0
  93. package/lib/icons/solid_logo.js +0 -0
  94. package/lib/icons/solid_logo.js.map +0 -0
  95. package/lib/index.d.ts +4 -4
  96. package/lib/index.d.ts.map +1 -1
  97. package/lib/index.js +30 -28
  98. package/lib/index.js.map +1 -1
  99. package/lib/jss/index.d.ts +0 -0
  100. package/lib/jss/index.d.ts.map +0 -0
  101. package/lib/jss/index.js +0 -0
  102. package/lib/jss/index.js.map +0 -0
  103. package/lib/log.d.ts +0 -0
  104. package/lib/log.d.ts.map +0 -0
  105. package/lib/log.js +0 -0
  106. package/lib/log.js.map +0 -0
  107. package/lib/login/login.d.ts +133 -0
  108. package/lib/login/login.d.ts.map +1 -0
  109. package/lib/login/login.js +1508 -0
  110. package/lib/login/login.js.map +1 -0
  111. package/lib/matrix/index.d.ts +0 -0
  112. package/lib/matrix/index.d.ts.map +0 -0
  113. package/lib/matrix/index.js +0 -0
  114. package/lib/matrix/index.js.map +0 -0
  115. package/lib/matrix/matrix.d.ts +0 -0
  116. package/lib/matrix/matrix.d.ts.map +0 -0
  117. package/lib/matrix/matrix.js +2 -2
  118. package/lib/matrix/matrix.js.map +1 -1
  119. package/lib/matrix/types.d.ts +0 -0
  120. package/lib/matrix/types.d.ts.map +0 -0
  121. package/lib/matrix/types.js +0 -0
  122. package/lib/matrix/types.js.map +0 -0
  123. package/lib/media/index.d.ts +0 -0
  124. package/lib/media/index.d.ts.map +0 -0
  125. package/lib/media/index.js +0 -0
  126. package/lib/media/index.js.map +0 -0
  127. package/lib/media/media-capture.d.ts +0 -0
  128. package/lib/media/media-capture.d.ts.map +0 -0
  129. package/lib/media/media-capture.js +0 -0
  130. package/lib/media/media-capture.js.map +0 -0
  131. package/lib/messageArea.js +9 -10
  132. package/lib/messageArea.js.map +1 -1
  133. package/lib/noun_Camera_1618446_000000.js +0 -0
  134. package/lib/noun_Camera_1618446_000000.js.map +0 -0
  135. package/lib/ns.js +0 -0
  136. package/lib/ns.js.map +0 -0
  137. package/lib/pad.d.ts +0 -0
  138. package/lib/pad.d.ts.map +0 -0
  139. package/lib/pad.js +2 -2
  140. package/lib/pad.js.map +1 -1
  141. package/lib/participation.d.ts +0 -0
  142. package/lib/participation.d.ts.map +1 -1
  143. package/lib/participation.js +4 -5
  144. package/lib/participation.js.map +1 -1
  145. package/lib/preferences.js +8 -8
  146. package/lib/preferences.js.map +1 -1
  147. package/lib/{authn → signup}/config-default.js +0 -0
  148. package/lib/signup/config-default.js.map +1 -0
  149. package/lib/{authn → signup}/signup.js +0 -0
  150. package/lib/signup/signup.js.map +1 -0
  151. package/lib/stories/decorators.js +0 -0
  152. package/lib/stories/decorators.js.map +0 -0
  153. package/lib/style.js +3 -3
  154. package/lib/style.js.map +1 -1
  155. package/lib/table.js +2 -3
  156. package/lib/table.js.map +1 -1
  157. package/lib/tabs.d.ts +1 -1
  158. package/lib/tabs.d.ts.map +1 -1
  159. package/lib/tabs.js +14 -6
  160. package/lib/tabs.js.map +1 -1
  161. package/lib/typings.d.js +0 -0
  162. package/lib/typings.d.js.map +0 -0
  163. package/lib/utils/headerFooterHelpers.d.ts +2 -3
  164. package/lib/utils/headerFooterHelpers.d.ts.map +1 -1
  165. package/lib/utils/headerFooterHelpers.js +63 -33
  166. package/lib/utils/headerFooterHelpers.js.map +1 -1
  167. package/lib/utils/index.js +6 -6
  168. package/lib/utils/index.js.map +1 -1
  169. package/lib/utils/label.d.ts +0 -0
  170. package/lib/utils/label.d.ts.map +0 -0
  171. package/lib/utils/label.js +4 -5
  172. package/lib/utils/label.js.map +1 -1
  173. package/lib/versionInfo.d.ts +0 -0
  174. package/lib/versionInfo.d.ts.map +0 -0
  175. package/lib/versionInfo.js +14 -14
  176. package/lib/versionInfo.js.map +1 -1
  177. package/lib/webpack-bundle.js +9094 -25125
  178. package/lib/webpack-bundle.js.map +1 -1
  179. package/lib/widgets/buttons/iconLinks.d.ts +0 -0
  180. package/lib/widgets/buttons/iconLinks.d.ts.map +0 -0
  181. package/lib/widgets/buttons/iconLinks.js +0 -0
  182. package/lib/widgets/buttons/iconLinks.js.map +0 -0
  183. package/lib/widgets/buttons.d.ts +0 -0
  184. package/lib/widgets/buttons.d.ts.map +0 -0
  185. package/lib/widgets/buttons.js +16 -16
  186. package/lib/widgets/buttons.js.map +1 -1
  187. package/lib/widgets/dragAndDrop.js +0 -0
  188. package/lib/widgets/dragAndDrop.js.map +0 -0
  189. package/lib/widgets/error.d.ts +0 -0
  190. package/lib/widgets/error.d.ts.map +0 -0
  191. package/lib/widgets/error.js +0 -0
  192. package/lib/widgets/error.js.map +0 -0
  193. package/lib/widgets/forms/autocomplete/autocompleteBar.d.ts +0 -0
  194. package/lib/widgets/forms/autocomplete/autocompleteBar.d.ts.map +0 -0
  195. package/lib/widgets/forms/autocomplete/autocompleteBar.js +2 -2
  196. package/lib/widgets/forms/autocomplete/autocompleteBar.js.map +1 -1
  197. package/lib/widgets/forms/autocomplete/autocompleteField.d.ts +0 -0
  198. package/lib/widgets/forms/autocomplete/autocompleteField.d.ts.map +0 -0
  199. package/lib/widgets/forms/autocomplete/autocompleteField.js +2 -2
  200. package/lib/widgets/forms/autocomplete/autocompleteField.js.map +1 -1
  201. package/lib/widgets/forms/autocomplete/autocompletePicker.d.ts +0 -0
  202. package/lib/widgets/forms/autocomplete/autocompletePicker.d.ts.map +0 -0
  203. package/lib/widgets/forms/autocomplete/autocompletePicker.js +2 -2
  204. package/lib/widgets/forms/autocomplete/autocompletePicker.js.map +1 -1
  205. package/lib/widgets/forms/autocomplete/language.d.ts +0 -0
  206. package/lib/widgets/forms/autocomplete/language.d.ts.map +1 -1
  207. package/lib/widgets/forms/autocomplete/language.js +7 -10
  208. package/lib/widgets/forms/autocomplete/language.js.map +1 -1
  209. package/lib/widgets/forms/autocomplete/publicData.d.ts +1 -1
  210. package/lib/widgets/forms/autocomplete/publicData.d.ts.map +1 -1
  211. package/lib/widgets/forms/autocomplete/publicData.js +15 -16
  212. package/lib/widgets/forms/autocomplete/publicData.js.map +1 -1
  213. package/lib/widgets/forms/basic.d.ts +2 -2
  214. package/lib/widgets/forms/basic.d.ts.map +1 -1
  215. package/lib/widgets/forms/basic.js +10 -8
  216. package/lib/widgets/forms/basic.js.map +1 -1
  217. package/lib/widgets/forms/comment.d.ts +1 -1
  218. package/lib/widgets/forms/comment.d.ts.map +0 -0
  219. package/lib/widgets/forms/comment.js +3 -3
  220. package/lib/widgets/forms/comment.js.map +1 -1
  221. package/lib/widgets/forms/fieldFunction.d.ts +0 -0
  222. package/lib/widgets/forms/fieldFunction.d.ts.map +0 -0
  223. package/lib/widgets/forms/fieldFunction.js +2 -2
  224. package/lib/widgets/forms/fieldFunction.js.map +1 -1
  225. package/lib/widgets/forms/fieldParams.d.ts +0 -0
  226. package/lib/widgets/forms/fieldParams.d.ts.map +0 -0
  227. package/lib/widgets/forms/fieldParams.js +0 -0
  228. package/lib/widgets/forms/fieldParams.js.map +0 -0
  229. package/lib/widgets/forms/formStyle.d.ts +0 -0
  230. package/lib/widgets/forms/formStyle.d.ts.map +0 -0
  231. package/lib/widgets/forms/formStyle.js +3 -3
  232. package/lib/widgets/forms/formStyle.js.map +1 -1
  233. package/lib/widgets/forms.js +61 -38
  234. package/lib/widgets/forms.js.map +1 -1
  235. package/lib/widgets/index.js +0 -0
  236. package/lib/widgets/index.js.map +0 -0
  237. package/lib/widgets/peoplePicker.js +2 -2
  238. package/lib/widgets/peoplePicker.js.map +1 -1
  239. package/lib/widgets/widgetHelpers.d.ts +0 -0
  240. package/lib/widgets/widgetHelpers.d.ts.map +0 -0
  241. package/lib/widgets/widgetHelpers.js +0 -0
  242. package/lib/widgets/widgetHelpers.js.map +0 -0
  243. package/package.json +13 -9
  244. package/lib/authn/authSession.d.ts +0 -4
  245. package/lib/authn/authSession.d.ts.map +0 -1
  246. package/lib/authn/authSession.js +0 -25
  247. package/lib/authn/authSession.js.map +0 -1
  248. package/lib/authn/authn.d.ts +0 -193
  249. package/lib/authn/authn.d.ts.map +0 -1
  250. package/lib/authn/authn.js +0 -2238
  251. package/lib/authn/authn.js.map +0 -1
  252. package/lib/authn/config-default.js.map +0 -1
  253. package/lib/authn/index.d.ts +0 -35
  254. package/lib/authn/index.d.ts.map +0 -1
  255. package/lib/authn/index.js +0 -44
  256. package/lib/authn/index.js.map +0 -1
  257. package/lib/authn/signup.js.map +0 -1
  258. package/lib/authn/types.d.ts +0 -25
  259. package/lib/authn/types.d.ts.map +0 -1
  260. package/lib/authn/types.js +0 -6
  261. package/lib/authn/types.js.map +0 -1
  262. package/lib/logic.d.ts +0 -8
  263. package/lib/logic.d.ts.map +0 -1
  264. package/lib/logic.js +0 -79
  265. package/lib/logic.js.map +0 -1
@@ -0,0 +1,1508 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ var _typeof = require("@babel/runtime/helpers/typeof");
6
+
7
+ Object.defineProperty(exports, "__esModule", {
8
+ value: true
9
+ });
10
+ exports.ensureLoadedPreferences = ensureLoadedPreferences;
11
+ exports.ensureLoadedProfile = ensureLoadedProfile;
12
+ exports.ensureLoggedIn = ensureLoggedIn;
13
+ exports.filterAvailablePanes = filterAvailablePanes;
14
+ exports.findAppInstances = findAppInstances;
15
+ exports.getUserRoles = getUserRoles;
16
+ exports.loginStatusBox = loginStatusBox;
17
+ exports.newAppInstance = newAppInstance;
18
+ exports.registrationControl = registrationControl;
19
+ exports.registrationList = registrationList;
20
+ exports.renderSignInPopup = renderSignInPopup;
21
+ exports.selectWorkspace = selectWorkspace;
22
+
23
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
24
+
25
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
26
+
27
+ var _rdflib = require("rdflib");
28
+
29
+ var _solidLogic = require("solid-logic");
30
+
31
+ var debug = _interopRequireWildcard(require("../debug"));
32
+
33
+ var _log = require("../log");
34
+
35
+ var ns = _interopRequireWildcard(require("../ns.js"));
36
+
37
+ var _signup = require("../signup/signup.js");
38
+
39
+ var _style = require("../style");
40
+
41
+ var _index = require("../utils/index");
42
+
43
+ var widgets = _interopRequireWildcard(require("../widgets"));
44
+
45
+ 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); }
46
+
47
+ 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; }
48
+
49
+ /**
50
+ * Signing in, signing up, profile and preferences reloading
51
+ * Type index management
52
+ *
53
+ * Many functions in this module take a context object which
54
+ * holds various RDF symbols, add to it, and return a promise of it.
55
+ *
56
+ * * `me` RDF symbol for the user's WebID
57
+ * * `publicProfile` The user's public profile, iff loaded
58
+ * * `preferencesFile` The user's personal preference file, iff loaded
59
+ * * `index.public` The user's public type index file
60
+ * * `index.private` The user's private type index file
61
+ *
62
+ * Not RDF symbols:
63
+ * * `noun` A string in english for the type of thing -- like "address book"
64
+ * * `instance` An array of nodes which are existing instances
65
+ * * `containers` An array of nodes of containers of instances
66
+ * * `div` A DOM element where UI can be displayed
67
+ * * `statusArea` A DOM element (opt) progress stuff can be displayed, or error messages
68
+ * *
69
+ * * Vocabulary: "load" loads a file if it exists;
70
+ * * 'Ensure" CREATES the file if it does not exist (if it can) and then loads it.
71
+ * @packageDocumentation
72
+ */
73
+
74
+ /**
75
+ * Resolves with the logged in user's WebID
76
+ *
77
+ * @param context
78
+ */
79
+ // used to be logIn
80
+ function ensureLoggedIn(context) {
81
+ var me = _solidLogic.authn.currentUser();
82
+
83
+ if (me) {
84
+ _solidLogic.authn.saveUser(me, context);
85
+
86
+ return Promise.resolve(context);
87
+ }
88
+
89
+ return new Promise(function (resolve) {
90
+ _solidLogic.authn.checkUser().then(function (webId) {
91
+ // Already logged in?
92
+ if (webId) {
93
+ debug.log("logIn: Already logged in as ".concat(webId));
94
+ return resolve(context);
95
+ }
96
+
97
+ if (!context.div || !context.dom) {
98
+ return resolve(context);
99
+ }
100
+
101
+ var box = loginStatusBox(context.dom, function (webIdUri) {
102
+ _solidLogic.authn.saveUser(webIdUri, context);
103
+
104
+ resolve(context); // always pass growing context
105
+ });
106
+ context.div.appendChild(box);
107
+ });
108
+ });
109
+ }
110
+ /**
111
+ * Loads preference file
112
+ * Do this after having done log in and load profile
113
+ *
114
+ * @private
115
+ *
116
+ * @param context
117
+ */
118
+ // used to be logInLoadPreferences
119
+
120
+
121
+ function ensureLoadedPreferences(_x2) {
122
+ return _ensureLoadedPreferences.apply(this, arguments);
123
+ }
124
+ /**
125
+ * Logs the user in and loads their WebID profile document into the store
126
+ *
127
+ * @param context
128
+ *
129
+ * @returns Resolves with the context after login / fetch
130
+ */
131
+ // used to be logInLoadProfile
132
+
133
+
134
+ function _ensureLoadedPreferences() {
135
+ _ensureLoadedPreferences = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4(context) {
136
+ var statusArea, progressDisplay, complain, preferencesFile, m2;
137
+ return _regenerator["default"].wrap(function _callee4$(_context4) {
138
+ while (1) {
139
+ switch (_context4.prev = _context4.next) {
140
+ case 0:
141
+ complain = function _complain(message) {
142
+ message = "ensureLoadedPreferences: ".concat(message);
143
+
144
+ if (statusArea) {
145
+ // statusArea.innerHTML = ''
146
+ statusArea.appendChild(widgets.errorMessageBlock(context.dom, message));
147
+ }
148
+
149
+ debug.log(message); // reject(new Error(message))
150
+ };
151
+
152
+ if (!context.preferencesFile) {
153
+ _context4.next = 3;
154
+ break;
155
+ }
156
+
157
+ return _context4.abrupt("return", Promise.resolve(context));
158
+
159
+ case 3:
160
+ // already done
161
+ statusArea = context.statusArea || context.div || null;
162
+ _context4.prev = 4;
163
+ _context4.next = 7;
164
+ return ensureLoadedProfile(context);
165
+
166
+ case 7:
167
+ context = _context4.sent;
168
+ _context4.next = 10;
169
+ return _solidLogic.solidLogicSingleton.loadPreferences(context.me);
170
+
171
+ case 10:
172
+ preferencesFile = _context4.sent;
173
+
174
+ if (progressDisplay) {
175
+ progressDisplay.parentNode.removeChild(progressDisplay);
176
+ }
177
+
178
+ context.preferencesFile = preferencesFile;
179
+ _context4.next = 48;
180
+ break;
181
+
182
+ case 15:
183
+ _context4.prev = 15;
184
+ _context4.t0 = _context4["catch"](4);
185
+
186
+ if (!(_context4.t0 instanceof _solidLogic.UnauthorizedError)) {
187
+ _context4.next = 22;
188
+ break;
189
+ }
190
+
191
+ m2 = 'Ooops - you are not authenticated (properly logged in) to for me to read your preference file. Try loggin out and logging in?';
192
+ (0, _log.alert)(m2);
193
+ _context4.next = 48;
194
+ break;
195
+
196
+ case 22:
197
+ if (!(_context4.t0 instanceof _solidLogic.CrossOriginForbiddenError)) {
198
+ _context4.next = 28;
199
+ break;
200
+ }
201
+
202
+ m2 = "Unauthorized: Assuming preference file blocked for origin ".concat(window.location.origin);
203
+ context.preferencesFileError = m2;
204
+ return _context4.abrupt("return", context);
205
+
206
+ case 28:
207
+ if (!(_context4.t0 instanceof _solidLogic.SameOriginForbiddenError)) {
208
+ _context4.next = 33;
209
+ break;
210
+ }
211
+
212
+ m2 = 'You are not authorized to read your preference file. This may be because you are using an untrusted web app.';
213
+ debug.warn(m2);
214
+ _context4.next = 48;
215
+ break;
216
+
217
+ case 33:
218
+ if (!(_context4.t0 instanceof _solidLogic.NotFoundError)) {
219
+ _context4.next = 42;
220
+ break;
221
+ }
222
+
223
+ if (!confirm("You do not currently have a preference file. OK for me to create an empty one? ".concat(_context4.t0.preferencesFile || ''))) {
224
+ _context4.next = 39;
225
+ break;
226
+ }
227
+
228
+ // @@@ code me ... weird to have a name of the file but no file
229
+ (0, _log.alert)("Sorry; I am not prepared to do this. Please create an empty file at ".concat(_context4.t0.preferencesFile || '(?)'));
230
+ complain(new Error('Sorry; no code yet to create a preference file at '));
231
+ _context4.next = 40;
232
+ break;
233
+
234
+ case 39:
235
+ throw new Error("User declined to create a preference file at ".concat(_context4.t0.preferencesFile || '(?)'));
236
+
237
+ case 40:
238
+ _context4.next = 48;
239
+ break;
240
+
241
+ case 42:
242
+ if (!(_context4.t0 instanceof _solidLogic.FetchError)) {
243
+ _context4.next = 47;
244
+ break;
245
+ }
246
+
247
+ m2 = "Strange: Error ".concat(_context4.t0.status, " trying to read your preference file.").concat(_context4.t0.message);
248
+ (0, _log.alert)(m2);
249
+ _context4.next = 48;
250
+ break;
251
+
252
+ case 47:
253
+ throw new Error("(via loadPrefs) ".concat(_context4.t0));
254
+
255
+ case 48:
256
+ return _context4.abrupt("return", context);
257
+
258
+ case 49:
259
+ case "end":
260
+ return _context4.stop();
261
+ }
262
+ }
263
+ }, _callee4, null, [[4, 15]]);
264
+ }));
265
+ return _ensureLoadedPreferences.apply(this, arguments);
266
+ }
267
+
268
+ function ensureLoadedProfile(_x3) {
269
+ return _ensureLoadedProfile.apply(this, arguments);
270
+ }
271
+ /**
272
+ * Returns promise of context with arrays of symbols
273
+ *
274
+ * 2016-12-11 change to include forClass arc a la
275
+ * https://github.com/solid/solid/blob/main/proposals/data-discovery.md
276
+ */
277
+
278
+
279
+ function _ensureLoadedProfile() {
280
+ _ensureLoadedProfile = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee5(context) {
281
+ var logInContext;
282
+ return _regenerator["default"].wrap(function _callee5$(_context5) {
283
+ while (1) {
284
+ switch (_context5.prev = _context5.next) {
285
+ case 0:
286
+ if (!context.publicProfile) {
287
+ _context5.next = 2;
288
+ break;
289
+ }
290
+
291
+ return _context5.abrupt("return", context);
292
+
293
+ case 2:
294
+ _context5.prev = 2;
295
+ _context5.next = 5;
296
+ return ensureLoggedIn(context);
297
+
298
+ case 5:
299
+ logInContext = _context5.sent;
300
+
301
+ if (logInContext.me) {
302
+ _context5.next = 8;
303
+ break;
304
+ }
305
+
306
+ throw new Error('Could not log in');
307
+
308
+ case 8:
309
+ _context5.next = 10;
310
+ return _solidLogic.solidLogicSingleton.loadProfile(logInContext.me);
311
+
312
+ case 10:
313
+ context.publicProfile = _context5.sent;
314
+ _context5.next = 17;
315
+ break;
316
+
317
+ case 13:
318
+ _context5.prev = 13;
319
+ _context5.t0 = _context5["catch"](2);
320
+
321
+ if (context.div && context.dom) {
322
+ context.div.appendChild(widgets.errorMessageBlock(context.dom, _context5.t0.message));
323
+ }
324
+
325
+ throw new Error("Can't log in: ".concat(_context5.t0));
326
+
327
+ case 17:
328
+ return _context5.abrupt("return", context);
329
+
330
+ case 18:
331
+ case "end":
332
+ return _context5.stop();
333
+ }
334
+ }
335
+ }, _callee5, null, [[2, 13]]);
336
+ }));
337
+ return _ensureLoadedProfile.apply(this, arguments);
338
+ }
339
+
340
+ function findAppInstances(_x4, _x5, _x6) {
341
+ return _findAppInstances.apply(this, arguments);
342
+ }
343
+ /**
344
+ * UI to control registration of instance
345
+ */
346
+
347
+
348
+ function _findAppInstances() {
349
+ _findAppInstances = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee6(context, theClass, isPublic) {
350
+ var visibility, index, thisIndex, registrations, instances, containers, unique, e, i, cont;
351
+ return _regenerator["default"].wrap(function _callee6$(_context6) {
352
+ while (1) {
353
+ switch (_context6.prev = _context6.next) {
354
+ case 0:
355
+ unique = function _unique(arr) {
356
+ return Array.from(new Set(arr));
357
+ };
358
+
359
+ if (!(isPublic === undefined)) {
360
+ _context6.next = 7;
361
+ break;
362
+ }
363
+
364
+ _context6.next = 4;
365
+ return findAppInstances(context, theClass, true);
366
+
367
+ case 4:
368
+ _context6.next = 6;
369
+ return findAppInstances(context, theClass, false);
370
+
371
+ case 6:
372
+ return _context6.abrupt("return", context);
373
+
374
+ case 7:
375
+ _context6.prev = 7;
376
+ _context6.next = 10;
377
+ return isPublic ? ensureLoadedProfile(context) : ensureLoadedPreferences(context);
378
+
379
+ case 10:
380
+ _context6.next = 15;
381
+ break;
382
+
383
+ case 12:
384
+ _context6.prev = 12;
385
+ _context6.t0 = _context6["catch"](7);
386
+ widgets.complain(context, "loadIndex: login and load problem ".concat(_context6.t0));
387
+
388
+ case 15:
389
+ // console.log('awaited LogInLoad!', context)
390
+ visibility = isPublic ? 'public' : 'private';
391
+ _context6.prev = 16;
392
+ _context6.next = 19;
393
+ return (0, _solidLogic.loadIndex)(context, isPublic);
394
+
395
+ case 19:
396
+ _context6.next = 24;
397
+ break;
398
+
399
+ case 21:
400
+ _context6.prev = 21;
401
+ _context6.t1 = _context6["catch"](16);
402
+ debug.error(_context6.t1);
403
+
404
+ case 24:
405
+ index = context.index;
406
+ thisIndex = index[visibility];
407
+ registrations = thisIndex.map(function (ix) {
408
+ return _solidLogic.solidLogicSingleton.store.each(undefined, ns.solid('forClass'), theClass, ix);
409
+ }).reduce(function (acc, curr) {
410
+ return acc.concat(curr);
411
+ }, []);
412
+ instances = registrations.map(function (reg) {
413
+ return _solidLogic.solidLogicSingleton.store.each(reg, ns.solid('instance'));
414
+ }).reduce(function (acc, curr) {
415
+ return acc.concat(curr);
416
+ }, []);
417
+ containers = registrations.map(function (reg) {
418
+ return _solidLogic.solidLogicSingleton.store.each(reg, ns.solid('instanceContainer'));
419
+ }).reduce(function (acc, curr) {
420
+ return acc.concat(curr);
421
+ }, []);
422
+ context.instances = context.instances || [];
423
+ context.instances = unique(context.instances.concat(instances));
424
+ context.containers = context.containers || [];
425
+ context.containers = unique(context.containers.concat(containers));
426
+
427
+ if (containers.length) {
428
+ _context6.next = 35;
429
+ break;
430
+ }
431
+
432
+ return _context6.abrupt("return", context);
433
+
434
+ case 35:
435
+ _context6.prev = 35;
436
+ _context6.next = 38;
437
+ return _solidLogic.solidLogicSingleton.load(containers);
438
+
439
+ case 38:
440
+ _context6.next = 45;
441
+ break;
442
+
443
+ case 40:
444
+ _context6.prev = 40;
445
+ _context6.t2 = _context6["catch"](35);
446
+ e = new Error("[FAI] Unable to load containers".concat(_context6.t2));
447
+ debug.log(e); // complain
448
+
449
+ widgets.complain(context, "Error looking for ".concat(_index.utils.label(theClass), ": ").concat(_context6.t2)); // but then ignore it
450
+ // throw new Error(e)
451
+
452
+ case 45:
453
+ i = 0;
454
+
455
+ case 46:
456
+ if (!(i < containers.length)) {
457
+ _context6.next = 56;
458
+ break;
459
+ }
460
+
461
+ cont = containers[i];
462
+ _context6.t3 = context.instances;
463
+ _context6.next = 51;
464
+ return _solidLogic.solidLogicSingleton.getContainerMembers(cont.value);
465
+
466
+ case 51:
467
+ _context6.t4 = _context6.sent.map(function (uri) {
468
+ return _solidLogic.solidLogicSingleton.store.sym(uri);
469
+ });
470
+ context.instances = _context6.t3.concat.call(_context6.t3, _context6.t4);
471
+
472
+ case 53:
473
+ i++;
474
+ _context6.next = 46;
475
+ break;
476
+
477
+ case 56:
478
+ return _context6.abrupt("return", context);
479
+
480
+ case 57:
481
+ case "end":
482
+ return _context6.stop();
483
+ }
484
+ }
485
+ }, _callee6, null, [[7, 12], [16, 21], [35, 40]]);
486
+ }));
487
+ return _findAppInstances.apply(this, arguments);
488
+ }
489
+
490
+ function registrationControl(_x7, _x8, _x9) {
491
+ return _registrationControl.apply(this, arguments);
492
+ }
493
+ /**
494
+ * UI to List at all registered things
495
+ */
496
+
497
+
498
+ function _registrationControl() {
499
+ _registrationControl = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee7(context, instance, theClass) {
500
+ var dom, box, context2, msg, tbody, form, registrationStatements, index, statements, _msg;
501
+
502
+ return _regenerator["default"].wrap(function _callee7$(_context7) {
503
+ while (1) {
504
+ switch (_context7.prev = _context7.next) {
505
+ case 0:
506
+ dom = context.dom;
507
+
508
+ if (!(!dom || !context.div)) {
509
+ _context7.next = 3;
510
+ break;
511
+ }
512
+
513
+ return _context7.abrupt("return", context);
514
+
515
+ case 3:
516
+ box = dom.createElement('div');
517
+ context.div.appendChild(box);
518
+ context.me = _solidLogic.authn.currentUser(); // @@
519
+
520
+ if (context.me) {
521
+ _context7.next = 9;
522
+ break;
523
+ }
524
+
525
+ box.innerHTML = '<p style="margin:2em;">(Log in to save a link to this)</p>';
526
+ return _context7.abrupt("return", context);
527
+
528
+ case 9:
529
+ _context7.prev = 9;
530
+ _context7.next = 12;
531
+ return (0, _solidLogic.ensureTypeIndexes)(context);
532
+
533
+ case 12:
534
+ context2 = _context7.sent;
535
+ _context7.next = 19;
536
+ break;
537
+
538
+ case 15:
539
+ _context7.prev = 15;
540
+ _context7.t0 = _context7["catch"](9);
541
+
542
+ if (context.div && context.preferencesFileError) {
543
+ msg = '(Preferences not available)';
544
+ context.div.appendChild(dom.createElement('p')).textContent = msg;
545
+ } else if (context.div) {
546
+ msg = "registrationControl: Type indexes not available: ".concat(_context7.t0);
547
+ context.div.appendChild(widgets.errorMessageBlock(context.dom, _context7.t0));
548
+ }
549
+
550
+ debug.log(msg);
551
+
552
+ case 19:
553
+ box.innerHTML = '<table><tbody><tr></tr><tr></tr></tbody></table>'; // tbody will be inserted anyway
554
+
555
+ box.setAttribute('style', 'font-size: 120%; text-align: right; padding: 1em; border: solid gray 0.05em;');
556
+ tbody = box.children[0].children[0];
557
+ form = new _rdflib.BlankNode(); // @@ say for now
558
+
559
+ registrationStatements = function registrationStatements(index) {
560
+ var registrations = _solidLogic.solidLogicSingleton.getRegistrations(instance, theClass);
561
+
562
+ var reg = registrations.length ? registrations[0] : widgets.newThing(index);
563
+ return [(0, _rdflib.st)(reg, ns.solid('instance'), instance, index), (0, _rdflib.st)(reg, ns.solid('forClass'), theClass, index)];
564
+ };
565
+
566
+ try {
567
+ if (context2.index && context2.index["public"] && context2.index["public"].length > 0) {
568
+ index = context2.index["public"][0];
569
+ statements = registrationStatements(index);
570
+ tbody.children[0].appendChild(widgets.buildCheckboxForm(context2.dom, _solidLogic.solidLogicSingleton.store, "Public link to this ".concat(context2.noun), null, statements, form, index));
571
+ }
572
+
573
+ if (context2.index && context2.index["private"] && context2.index["private"].length > 0) {
574
+ index = context2.index["private"][0];
575
+ statements = registrationStatements(index);
576
+ tbody.children[1].appendChild(widgets.buildCheckboxForm(context2.dom, _solidLogic.solidLogicSingleton.store, "Personal note of this ".concat(context2.noun), null, statements, form, index));
577
+ }
578
+ } catch (e) {
579
+ _msg = "registrationControl: Error making panel: ".concat(e);
580
+
581
+ if (context.div) {
582
+ context.div.appendChild(widgets.errorMessageBlock(context.dom, e));
583
+ }
584
+
585
+ debug.log(_msg);
586
+ }
587
+
588
+ return _context7.abrupt("return", context2);
589
+
590
+ case 26:
591
+ case "end":
592
+ return _context7.stop();
593
+ }
594
+ }
595
+ }, _callee7, null, [[9, 15]]);
596
+ }));
597
+ return _registrationControl.apply(this, arguments);
598
+ }
599
+
600
+ function registrationList(_x10, _x11) {
601
+ return _registrationList.apply(this, arguments);
602
+ }
603
+
604
+ function _registrationList() {
605
+ _registrationList = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee8(context0, options) {
606
+ var dom, div, box;
607
+ return _regenerator["default"].wrap(function _callee8$(_context8) {
608
+ while (1) {
609
+ switch (_context8.prev = _context8.next) {
610
+ case 0:
611
+ dom = context0.dom;
612
+ div = context0.div;
613
+ box = dom.createElement('div');
614
+ div.appendChild(box);
615
+ context0.me = _solidLogic.authn.currentUser(); // @@
616
+
617
+ if (context0.me) {
618
+ _context8.next = 8;
619
+ break;
620
+ }
621
+
622
+ box.innerHTML = '<p style="margin:2em;">(Log in list your stuff)</p>';
623
+ return _context8.abrupt("return", context0);
624
+
625
+ case 8:
626
+ return _context8.abrupt("return", (0, _solidLogic.ensureTypeIndexes)(context0).then(function (context) {
627
+ box.innerHTML = '<table><tbody></tbody></table>'; // tbody will be inserted anyway
628
+
629
+ // tbody will be inserted anyway
630
+ box.setAttribute('style', 'font-size: 120%; text-align: right; padding: 1em; border: solid #eee 0.5em;');
631
+ var table = box.firstChild;
632
+ var ix = [];
633
+ var sts = [];
634
+ var vs = ['private', 'public'];
635
+ vs.forEach(function (visibility) {
636
+ if (context.index && context.index[visibility].length > 0 && options[visibility]) {
637
+ ix = ix.concat(context.index[visibility][0]);
638
+ sts = sts.concat(_solidLogic.solidLogicSingleton.store.statementsMatching(undefined, ns.solid('instance'), undefined, context.index[visibility][0]));
639
+ }
640
+ });
641
+
642
+ var _loop = function _loop(i) {
643
+ var statement = sts[i];
644
+
645
+ if (options.type) {
646
+ // now check terms:forClass
647
+ if (!_solidLogic.solidLogicSingleton.store.holds(statement.subject, ns.solid('forClass'), options.type, statement.why)) {
648
+ return "continue"; // skip irrelevant ones
649
+ }
650
+ } // const cla = statement.subject
651
+
652
+
653
+ // const cla = statement.subject
654
+ var inst = statement.object;
655
+ table.appendChild(widgets.personTR(dom, ns.solid('instance'), inst, {
656
+ deleteFunction: function deleteFunction(_x) {
657
+ if (!_solidLogic.solidLogicSingleton.store.updater) {
658
+ throw new Error('Cannot delete this, store has no updater');
659
+ }
660
+
661
+ _solidLogic.solidLogicSingleton.store.updater.update([statement], [], function (uri, ok, errorBody) {
662
+ if (ok) {
663
+ debug.log("Removed from index: ".concat(statement.subject));
664
+ } else {
665
+ debug.log("Error: Cannot delete ".concat(statement, ": ").concat(errorBody));
666
+ }
667
+ });
668
+ }
669
+ }));
670
+ };
671
+
672
+ for (var i = 0; i < sts.length; i++) {
673
+ var _ret = _loop(i);
674
+
675
+ if (_ret === "continue") continue;
676
+ } // registrationList
677
+
678
+ /*
679
+ //const containers = solidLogicSingleton.store.each(theClass, ns.solid('instanceContainer'));
680
+ if (containers.length) {
681
+ fetcher.load(containers).then(function(xhrs){
682
+ for (const i=0; i<containers.length; i++) {
683
+ const cont = containers[i];
684
+ instances = instances.concat(solidLogicSingleton.store.each(cont, ns.ldp('contains')));
685
+ }
686
+ });
687
+ }
688
+ */
689
+
690
+
691
+ // registrationList
692
+
693
+ /*
694
+ //const containers = solidLogicSingleton.store.each(theClass, ns.solid('instanceContainer'));
695
+ if (containers.length) {
696
+ fetcher.load(containers).then(function(xhrs){
697
+ for (const i=0; i<containers.length; i++) {
698
+ const cont = containers[i];
699
+ instances = instances.concat(solidLogicSingleton.store.each(cont, ns.ldp('contains')));
700
+ }
701
+ });
702
+ }
703
+ */
704
+ return context;
705
+ }));
706
+
707
+ case 9:
708
+ case "end":
709
+ return _context8.stop();
710
+ }
711
+ }
712
+ }, _callee8);
713
+ }));
714
+ return _registrationList.apply(this, arguments);
715
+ }
716
+
717
+ function getDefaultSignInButtonStyle() {
718
+ return 'padding: 1em; border-radius:0.5em; font-size: 100%;';
719
+ }
720
+ /**
721
+ * Bootstrapping identity
722
+ * (Called by `loginStatusBox()`)
723
+ *
724
+ * @param dom
725
+ * @param setUserCallback
726
+ *
727
+ * @returns
728
+ */
729
+
730
+
731
+ function signInOrSignUpBox(dom, setUserCallback) {
732
+ var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
733
+ options = options || {};
734
+ var signInButtonStyle = options.buttonStyle || getDefaultSignInButtonStyle(); // @@ TODO Remove the need to cast HTML element to any
735
+
736
+ var box = dom.createElement('div');
737
+ var magicClassName = 'SolidSignInOrSignUpBox';
738
+ debug.log('widgets.signInOrSignUpBox');
739
+ box.setUserCallback = setUserCallback;
740
+ box.setAttribute('class', magicClassName);
741
+ box.style = 'display:flex;'; // @@ fix all typecasts like this
742
+ // Sign in button with PopUP
743
+
744
+ var signInPopUpButton = dom.createElement('input'); // multi
745
+
746
+ box.appendChild(signInPopUpButton);
747
+ signInPopUpButton.setAttribute('type', 'button');
748
+ signInPopUpButton.setAttribute('value', 'Log in');
749
+ signInPopUpButton.setAttribute('style', "".concat(signInButtonStyle, "background-color: #eef;"));
750
+
751
+ _solidLogic.authSession.onLogin(function () {
752
+ var me = _solidLogic.authn.currentUser(); // const sessionInfo = authSession.info
753
+ // if (sessionInfo && sessionInfo.isLoggedIn) {
754
+
755
+
756
+ if (me) {
757
+ // const webIdURI = sessionInfo.webId
758
+ var webIdURI = me.uri; // setUserCallback(webIdURI)
759
+
760
+ var divs = dom.getElementsByClassName(magicClassName);
761
+ debug.log("Logged in, ".concat(divs.length, " panels to be serviced")); // At the same time, satisfy all the other login boxes
762
+
763
+ for (var i = 0; i < divs.length; i++) {
764
+ var div = divs[i]; // @@ TODO Remove the need to manipulate HTML elements
765
+
766
+ if (div.setUserCallback) {
767
+ try {
768
+ div.setUserCallback(webIdURI);
769
+ var parent = div.parentNode;
770
+
771
+ if (parent) {
772
+ parent.removeChild(div);
773
+ }
774
+ } catch (e) {
775
+ debug.log("## Error satisfying login box: ".concat(e));
776
+ div.appendChild(widgets.errorMessageBlock(dom, e));
777
+ }
778
+ }
779
+ }
780
+ }
781
+ });
782
+
783
+ signInPopUpButton.addEventListener('click', function () {
784
+ var offline = (0, _solidLogic.offlineTestID)();
785
+ if (offline) return setUserCallback(offline.uri);
786
+ renderSignInPopup(dom);
787
+ }, false); // Sign up button
788
+
789
+ var signupButton = dom.createElement('input');
790
+ box.appendChild(signupButton);
791
+ signupButton.setAttribute('type', 'button');
792
+ signupButton.setAttribute('value', 'Sign Up for Solid');
793
+ signupButton.setAttribute('style', "".concat(signInButtonStyle, "background-color: #efe;"));
794
+ signupButton.addEventListener('click', function (_event) {
795
+ var signupMgr = new _signup.Signup();
796
+ signupMgr.signup().then(function (uri) {
797
+ debug.log('signInOrSignUpBox signed up ' + uri);
798
+ setUserCallback(uri);
799
+ });
800
+ }, false);
801
+ return box;
802
+ }
803
+
804
+ function renderSignInPopup(dom) {
805
+ /**
806
+ * Issuer Menu
807
+ */
808
+ var issuerPopup = dom.createElement('div');
809
+ issuerPopup.setAttribute('style', 'position: fixed; top: 0; left: 0; right: 0; bottom: 0; display: flex; justify-content: center; align-items: center;');
810
+ dom.body.appendChild(issuerPopup);
811
+ var issuerPopupBox = dom.createElement('div');
812
+ issuerPopupBox.setAttribute('style', "\n background-color: white;\n box-shadow: 0px 1px 4px rgba(0, 0, 0, 0.2);\n -webkit-box-shadow: 0px 1px 4px rgba(0, 0, 0, 0.2);\n -moz-box-shadow: 0px 1px 4px rgba(0, 0, 0, 0.2);\n -o-box-shadow: 0px 1px 4px rgba(0, 0, 0, 0.2);\n border-radius: 4px;\n min-width: 400px;\n padding: 10px;\n ");
813
+ issuerPopup.appendChild(issuerPopupBox);
814
+ var issuerPopupBoxTopMenu = dom.createElement('div');
815
+ issuerPopupBoxTopMenu.setAttribute('style', "\n border-bottom: 1px solid #DDD;\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n ");
816
+ issuerPopupBox.appendChild(issuerPopupBoxTopMenu);
817
+ var issuerPopupBoxLabel = dom.createElement('label');
818
+ issuerPopupBoxLabel.setAttribute('style', 'margin-right: 5px; font-weight: 800');
819
+ issuerPopupBoxLabel.innerText = 'Select an identity provider';
820
+ var issuerPopupBoxCloseButton = dom.createElement('button');
821
+ issuerPopupBoxCloseButton.innerHTML = '<img src="https://solid.github.io/solid-ui/src/icons/noun_1180156.svg" style="width: 2em; height: 2em;" title="Cancel">';
822
+ issuerPopupBoxCloseButton.setAttribute('style', 'background-color: transparent; border: none;');
823
+ issuerPopupBoxCloseButton.addEventListener('click', function () {
824
+ issuerPopup.remove();
825
+ });
826
+ issuerPopupBoxTopMenu.appendChild(issuerPopupBoxLabel);
827
+ issuerPopupBoxTopMenu.appendChild(issuerPopupBoxCloseButton);
828
+
829
+ var loginToIssuer = /*#__PURE__*/function () {
830
+ var _ref = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(issuerUri) {
831
+ var preLoginRedirectHash;
832
+ return _regenerator["default"].wrap(function _callee$(_context) {
833
+ while (1) {
834
+ switch (_context.prev = _context.next) {
835
+ case 0:
836
+ _context.prev = 0;
837
+ // Save hash
838
+ preLoginRedirectHash = new URL(window.location.href).hash;
839
+
840
+ if (preLoginRedirectHash) {
841
+ window.localStorage.setItem('preLoginRedirectHash', preLoginRedirectHash);
842
+ }
843
+
844
+ window.localStorage.setItem('loginIssuer', issuerUri); // Login
845
+
846
+ _context.next = 6;
847
+ return _solidLogic.authSession.login({
848
+ redirectUrl: window.location.href,
849
+ oidcIssuer: issuerUri
850
+ });
851
+
852
+ case 6:
853
+ _context.next = 11;
854
+ break;
855
+
856
+ case 8:
857
+ _context.prev = 8;
858
+ _context.t0 = _context["catch"](0);
859
+ (0, _log.alert)(_context.t0.message);
860
+
861
+ case 11:
862
+ case "end":
863
+ return _context.stop();
864
+ }
865
+ }
866
+ }, _callee, null, [[0, 8]]);
867
+ }));
868
+
869
+ return function loginToIssuer(_x12) {
870
+ return _ref.apply(this, arguments);
871
+ };
872
+ }();
873
+ /**
874
+ * Text-based idp selection
875
+ */
876
+
877
+
878
+ var issuerTextContainer = dom.createElement('div');
879
+ issuerTextContainer.setAttribute('style', "\n border-bottom: 1px solid #DDD;\n display: flex;\n flex-direction: column;\n padding-top: 10px;\n ");
880
+ var issuerTextInputContainer = dom.createElement('div');
881
+ issuerTextInputContainer.setAttribute('style', "\n display: flex;\n flex-direction: row;\n ");
882
+ var issuerTextLabel = dom.createElement('label');
883
+ issuerTextLabel.innerText = 'Enter the URL of your identity provider:';
884
+ issuerTextLabel.setAttribute('style', 'color: #888');
885
+ var issuerTextInput = dom.createElement('input');
886
+ issuerTextInput.setAttribute('type', 'text');
887
+ issuerTextInput.setAttribute('style', 'margin-left: 0 !important; flex: 1; margin-right: 5px !important');
888
+ issuerTextInput.setAttribute('placeholder', 'https://example.com');
889
+ issuerTextInput.value = localStorage.getItem('loginIssuer') || '';
890
+ var issuerTextGoButton = dom.createElement('button');
891
+ issuerTextGoButton.innerText = 'Go';
892
+ issuerTextGoButton.setAttribute('style', 'margin-top: 12px; margin-bottom: 12px;');
893
+ issuerTextGoButton.addEventListener('click', function () {
894
+ loginToIssuer(issuerTextInput.value);
895
+ });
896
+ issuerTextContainer.appendChild(issuerTextLabel);
897
+ issuerTextInputContainer.appendChild(issuerTextInput);
898
+ issuerTextInputContainer.appendChild(issuerTextGoButton);
899
+ issuerTextContainer.appendChild(issuerTextInputContainer);
900
+ issuerPopupBox.appendChild(issuerTextContainer);
901
+ /**
902
+ * Button-based idp selection
903
+ */
904
+
905
+ var issuerButtonContainer = dom.createElement('div');
906
+ issuerButtonContainer.setAttribute('style', "\n display: flex;\n flex-direction: column;\n padding-top: 10px;\n ");
907
+ var issuerBottonLabel = dom.createElement('label');
908
+ issuerBottonLabel.innerText = 'Or pick an identity provider from the list below:';
909
+ issuerBottonLabel.setAttribute('style', 'color: #888');
910
+ issuerButtonContainer.appendChild(issuerBottonLabel);
911
+ (0, _solidLogic.getSuggestedIssuers)().forEach(function (issuerInfo) {
912
+ var issuerButton = dom.createElement('button');
913
+ issuerButton.innerText = issuerInfo.name;
914
+ issuerButton.setAttribute('style', 'height: 38px; margin-top: 10px');
915
+ issuerButton.addEventListener('click', function () {
916
+ loginToIssuer(issuerInfo.uri);
917
+ });
918
+ issuerButtonContainer.appendChild(issuerButton);
919
+ });
920
+ issuerPopupBox.appendChild(issuerButtonContainer);
921
+ }
922
+ /**
923
+ * Login status box
924
+ *
925
+ * A big sign-up/sign in box or a logout box depending on the state
926
+ *
927
+ * @param dom
928
+ * @param listener
929
+ *
930
+ * @returns
931
+ */
932
+
933
+
934
+ function loginStatusBox(dom) {
935
+ var listener = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
936
+ var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
937
+ // 20190630
938
+ var me = (0, _solidLogic.offlineTestID)(); // @@ TODO Remove the need to cast HTML element to any
939
+
940
+ var box = dom.createElement('div');
941
+
942
+ function setIt(newidURI) {
943
+ if (!newidURI) {
944
+ return;
945
+ } // const uri = newidURI.uri || newidURI
946
+ // me = sym(uri)
947
+
948
+
949
+ me = _solidLogic.authn.saveUser(newidURI);
950
+ box.refresh();
951
+ if (listener) listener(me.uri);
952
+ }
953
+
954
+ function logoutButtonHandler(_event) {
955
+ var oldMe = me;
956
+
957
+ _solidLogic.authSession.logout().then(function () {
958
+ var message = "Your WebID was ".concat(oldMe, ". It has been forgotten.");
959
+ me = null;
960
+
961
+ try {
962
+ (0, _log.alert)(message);
963
+ } catch (e) {
964
+ window.alert(message);
965
+ }
966
+
967
+ box.refresh();
968
+ if (listener) listener(null);
969
+ }, function (err) {
970
+ (0, _log.alert)('Fail to log out:' + err);
971
+ });
972
+ }
973
+
974
+ function logoutButton(me, options) {
975
+ var signInButtonStyle = options.buttonStyle || getDefaultSignInButtonStyle();
976
+ var logoutLabel = 'WebID logout';
977
+
978
+ if (me) {
979
+ var nick = _solidLogic.solidLogicSingleton.store.any(me, ns.foaf('nick')) || _solidLogic.solidLogicSingleton.store.any(me, ns.foaf('name'));
980
+
981
+ if (nick) {
982
+ logoutLabel = 'Logout ' + nick.value;
983
+ }
984
+ }
985
+
986
+ var signOutButton = dom.createElement('input'); // signOutButton.className = 'WebIDCancelButton'
987
+
988
+ signOutButton.setAttribute('type', 'button');
989
+ signOutButton.setAttribute('value', logoutLabel);
990
+ signOutButton.setAttribute('style', "".concat(signInButtonStyle, "background-color: #eee;"));
991
+ signOutButton.addEventListener('click', logoutButtonHandler, false);
992
+ return signOutButton;
993
+ }
994
+
995
+ box.refresh = function () {
996
+ me = _solidLogic.authn.currentUser();
997
+
998
+ if (me && box.me !== me.uri || !me && box.me) {
999
+ widgets.clearElement(box);
1000
+
1001
+ if (me) {
1002
+ box.appendChild(logoutButton(me, options));
1003
+ } else {
1004
+ box.appendChild(signInOrSignUpBox(dom, setIt, options));
1005
+ }
1006
+ }
1007
+
1008
+ box.me = me ? me.uri : null;
1009
+ };
1010
+
1011
+ box.refresh();
1012
+
1013
+ function trackSession() {
1014
+ me = _solidLogic.authn.currentUser();
1015
+ box.refresh();
1016
+ }
1017
+
1018
+ trackSession();
1019
+
1020
+ _solidLogic.authSession.onLogin(trackSession);
1021
+
1022
+ _solidLogic.authSession.onLogout(trackSession);
1023
+
1024
+ box.me = '99999'; // Force refresh
1025
+
1026
+ box.refresh();
1027
+ return box;
1028
+ }
1029
+
1030
+ _solidLogic.authSession.onLogout( /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2() {
1031
+ var issuer, wellKnownUri, wellKnownResult, openidConfiguration;
1032
+ return _regenerator["default"].wrap(function _callee2$(_context2) {
1033
+ while (1) {
1034
+ switch (_context2.prev = _context2.next) {
1035
+ case 0:
1036
+ issuer = window.localStorage.getItem('loginIssuer');
1037
+
1038
+ if (!issuer) {
1039
+ _context2.next = 19;
1040
+ break;
1041
+ }
1042
+
1043
+ _context2.prev = 2;
1044
+ wellKnownUri = new URL(issuer);
1045
+ wellKnownUri.pathname = '/.well-known/openid-configuration';
1046
+ _context2.next = 7;
1047
+ return fetch(wellKnownUri.toString());
1048
+
1049
+ case 7:
1050
+ wellKnownResult = _context2.sent;
1051
+
1052
+ if (!(wellKnownResult.status === 200)) {
1053
+ _context2.next = 15;
1054
+ break;
1055
+ }
1056
+
1057
+ _context2.next = 11;
1058
+ return wellKnownResult.json();
1059
+
1060
+ case 11:
1061
+ openidConfiguration = _context2.sent;
1062
+
1063
+ if (!(openidConfiguration && openidConfiguration.end_session_endpoint)) {
1064
+ _context2.next = 15;
1065
+ break;
1066
+ }
1067
+
1068
+ _context2.next = 15;
1069
+ return fetch(openidConfiguration.end_session_endpoint, {
1070
+ credentials: 'include'
1071
+ });
1072
+
1073
+ case 15:
1074
+ _context2.next = 19;
1075
+ break;
1076
+
1077
+ case 17:
1078
+ _context2.prev = 17;
1079
+ _context2.t0 = _context2["catch"](2);
1080
+
1081
+ case 19:
1082
+ window.location.reload();
1083
+
1084
+ case 20:
1085
+ case "end":
1086
+ return _context2.stop();
1087
+ }
1088
+ }
1089
+ }, _callee2, null, [[2, 17]]);
1090
+ })));
1091
+ /**
1092
+ * Workspace selection etc
1093
+ * See https://github.com/solid/userguide/issues/16
1094
+ */
1095
+
1096
+ /**
1097
+ * Returns a UI object which, if it selects a workspace,
1098
+ * will callback(workspace, newBase).
1099
+ * See https://github.com/solid/userguide/issues/16 for more info on workspaces.
1100
+ *
1101
+ * If necessary, will get an account, preference file, etc. In sequence:
1102
+ *
1103
+ * - If not logged in, log in.
1104
+ * - Load preference file
1105
+ * - Prompt user for workspaces
1106
+ * - Allows the user to just type in a URI by hand
1107
+ *
1108
+ * Calls back with the workspace and the base URI
1109
+ *
1110
+ * @param dom
1111
+ * @param appDetails
1112
+ * @param callbackWS
1113
+ */
1114
+
1115
+
1116
+ function selectWorkspace(dom, appDetails, callbackWS) {
1117
+ var noun = appDetails.noun;
1118
+ var appPathSegment = appDetails.appPathSegment;
1119
+ var me = (0, _solidLogic.offlineTestID)();
1120
+ var box = dom.createElement('div');
1121
+ var context = {
1122
+ me: me,
1123
+ dom: dom,
1124
+ div: box
1125
+ };
1126
+
1127
+ function say(s, background) {
1128
+ box.appendChild(widgets.errorMessageBlock(dom, s, background));
1129
+ }
1130
+
1131
+ function figureOutBase(ws) {
1132
+ var newBaseNode = _solidLogic.solidLogicSingleton.store.any(ws, ns.space('uriPrefix'));
1133
+
1134
+ var newBaseString;
1135
+
1136
+ if (!newBaseNode) {
1137
+ newBaseString = ws.uri.split('#')[0];
1138
+ } else {
1139
+ newBaseString = newBaseNode.value;
1140
+ }
1141
+
1142
+ if (newBaseString.slice(-1) !== '/') {
1143
+ debug.log("".concat(appPathSegment, ": No / at end of uriPrefix ").concat(newBaseString)); // @@ paramater?
1144
+
1145
+ newBaseString = "".concat(newBaseString, "/");
1146
+ }
1147
+
1148
+ var now = new Date();
1149
+ newBaseString += "".concat(appPathSegment, "/id").concat(now.getTime(), "/"); // unique id
1150
+
1151
+ return newBaseString;
1152
+ }
1153
+
1154
+ function displayOptions(context) {
1155
+ // console.log('displayOptions!', context)
1156
+ function makeNewWorkspace(_x13) {
1157
+ return _makeNewWorkspace.apply(this, arguments);
1158
+ } // const status = ''
1159
+
1160
+
1161
+ function _makeNewWorkspace() {
1162
+ _makeNewWorkspace = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3(_event) {
1163
+ var row, cell, newBase, newWs, newData;
1164
+ return _regenerator["default"].wrap(function _callee3$(_context3) {
1165
+ while (1) {
1166
+ switch (_context3.prev = _context3.next) {
1167
+ case 0:
1168
+ row = table.appendChild(dom.createElement('tr'));
1169
+ cell = row.appendChild(dom.createElement('td'));
1170
+ cell.setAttribute('colspan', '3');
1171
+ cell.style.padding = '0.5em';
1172
+ _context3.t0 = encodeURI;
1173
+ _context3.next = 7;
1174
+ return widgets.askName(dom, _solidLogic.solidLogicSingleton.store, cell, ns.solid('URL'), ns.space('Workspace'), 'Workspace');
1175
+
1176
+ case 7:
1177
+ _context3.t1 = _context3.sent;
1178
+ newBase = (0, _context3.t0)(_context3.t1);
1179
+ newWs = widgets.newThing(context.preferencesFile);
1180
+ newData = [(0, _rdflib.st)(context.me, ns.space('workspace'), newWs, context.preferencesFile), // eslint-disable-next-line camelcase
1181
+ (0, _rdflib.st)(newWs, ns.space('uriPrefix'), newBase, context.preferencesFile)];
1182
+
1183
+ if (_solidLogic.solidLogicSingleton.store.updater) {
1184
+ _context3.next = 13;
1185
+ break;
1186
+ }
1187
+
1188
+ throw new Error('store has no updater');
1189
+
1190
+ case 13:
1191
+ _context3.next = 15;
1192
+ return _solidLogic.solidLogicSingleton.store.updater.update([], newData);
1193
+
1194
+ case 15:
1195
+ case "end":
1196
+ return _context3.stop();
1197
+ }
1198
+ }
1199
+ }, _callee3);
1200
+ }));
1201
+ return _makeNewWorkspace.apply(this, arguments);
1202
+ }
1203
+
1204
+ var id = context.me;
1205
+ var preferencesFile = context.preferencesFile;
1206
+ var newBase = null; // A workspace specifically defined in the private preference file:
1207
+
1208
+ var w = _solidLogic.solidLogicSingleton.store.each(id, ns.space('workspace'), undefined, preferencesFile); // Only trust preference file here
1209
+ // A workspace in a storage in the public profile:
1210
+
1211
+
1212
+ var storages = _solidLogic.solidLogicSingleton.store.each(id, ns.space('storage')); // @@ No provenance requirement at the moment
1213
+
1214
+
1215
+ if (w.length === 0 && storages) {
1216
+ say("You don't seem to have any workspaces. You have ".concat(storages.length, " storage spaces."), 'white');
1217
+ storages.map(function (s) {
1218
+ w = w.concat(_solidLogic.solidLogicSingleton.store.each(s, ns.ldp('contains')));
1219
+ return w;
1220
+ }).filter(function (file) {
1221
+ return file.id ? ['public', 'private'].includes(file.id().toLowerCase()) : '';
1222
+ });
1223
+ }
1224
+
1225
+ if (w.length === 1) {
1226
+ say("Workspace used: ".concat(w[0].uri), 'white'); // @@ allow user to see URI
1227
+
1228
+ newBase = figureOutBase(w[0]); // callbackWS(w[0], newBase)
1229
+ // } else if (w.length === 0) {
1230
+ } // Prompt for ws selection or creation
1231
+ // say( w.length + " workspaces for " + id + "Choose one.");
1232
+
1233
+
1234
+ var table = dom.createElement('table');
1235
+ table.setAttribute('style', 'border-collapse:separate; border-spacing: 0.5em;'); // const popup = window.open(undefined, '_blank', { height: 300, width:400 }, false)
1236
+
1237
+ box.appendChild(table); // Add a field for directly adding the URI yourself
1238
+ // const hr = box.appendChild(dom.createElement('hr')) // @@
1239
+
1240
+ box.appendChild(dom.createElement('hr')); // @@
1241
+
1242
+ var p = box.appendChild(dom.createElement('p'));
1243
+ p.style = _style.commentStyle;
1244
+ p.textContent = "Where would you like to store the data for the ".concat(noun, "?\n Give the URL of the folder where you would like the data stored.\n It can be anywhere in solid world - this URI is just an idea."); // @@ TODO Remove the need to cast baseField to any
1245
+
1246
+ var baseField = box.appendChild(dom.createElement('input'));
1247
+ baseField.setAttribute('type', 'text');
1248
+ baseField.style = _style.textInputStyle;
1249
+ baseField.size = 80; // really a string
1250
+
1251
+ baseField.label = 'base URL';
1252
+ baseField.autocomplete = 'on';
1253
+
1254
+ if (newBase) {
1255
+ // set to default
1256
+ baseField.value = newBase;
1257
+ }
1258
+
1259
+ context.baseField = baseField;
1260
+ box.appendChild(dom.createElement('br')); // @@
1261
+
1262
+ var button = box.appendChild(dom.createElement('button'));
1263
+ button.style = _style.buttonStyle;
1264
+ button.textContent = "Start new ".concat(noun, " at this URI");
1265
+ button.addEventListener('click', function (_event) {
1266
+ var newBase = baseField.value.replace(' ', '%20'); // do not re-encode in general, as % encodings may exist
1267
+
1268
+ if (newBase.slice(-1) !== '/') {
1269
+ newBase += '/';
1270
+ }
1271
+
1272
+ callbackWS(null, newBase);
1273
+ }); // Now go set up the table of spaces
1274
+ // const row = 0
1275
+
1276
+ w = w.filter(function (x) {
1277
+ return !_solidLogic.solidLogicSingleton.store.holds(x, ns.rdf('type'), // Ignore master workspaces
1278
+ ns.space('MasterWorkspace'));
1279
+ });
1280
+ var col1, col2, col3, tr, ws, style, comment;
1281
+ var cellStyle = 'height: 3em; margin: 1em; padding: 1em white; border-radius: 0.3em;';
1282
+ var deselectedStyle = "".concat(cellStyle, "border: 0px;"); // const selectedStyle = cellStyle + 'border: 1px solid black;'
1283
+
1284
+ for (var i = 0; i < w.length; i++) {
1285
+ ws = w[i];
1286
+ tr = dom.createElement('tr');
1287
+
1288
+ if (i === 0) {
1289
+ col1 = dom.createElement('td');
1290
+ col1.setAttribute('rowspan', "".concat(w.length));
1291
+ col1.textContent = 'Choose a workspace for this:';
1292
+ col1.setAttribute('style', 'vertical-align:middle;');
1293
+ tr.appendChild(col1);
1294
+ }
1295
+
1296
+ col2 = dom.createElement('td');
1297
+ style = _solidLogic.solidLogicSingleton.store.anyValue(ws, ns.ui('style'));
1298
+
1299
+ if (!style) {
1300
+ // Otherwise make up arbitrary colour
1301
+ var hash = function hash(x) {
1302
+ return x.split('').reduce(function (a, b) {
1303
+ a = (a << 5) - a + b.charCodeAt(0);
1304
+ return a & a;
1305
+ }, 0);
1306
+ };
1307
+
1308
+ var bgcolor = "#".concat((hash(ws.uri) & 0xffffff | 0xc0c0c0).toString(16)); // c0c0c0 forces pale
1309
+
1310
+ style = "color: black ; background-color: ".concat(bgcolor, ";");
1311
+ }
1312
+
1313
+ col2.setAttribute('style', deselectedStyle + style);
1314
+ tr.target = ws.uri;
1315
+
1316
+ var label = _solidLogic.solidLogicSingleton.store.any(ws, ns.rdfs('label'));
1317
+
1318
+ if (!label) {
1319
+ label = ws.uri.split('/').slice(-1)[0] || ws.uri.split('/').slice(-2)[0];
1320
+ }
1321
+
1322
+ col2.textContent = label || '???';
1323
+ tr.appendChild(col2);
1324
+
1325
+ if (i === 0) {
1326
+ col3 = dom.createElement('td');
1327
+ col3.setAttribute('rowspan', "".concat(w.length, "1")); // col3.textContent = '@@@@@ remove';
1328
+
1329
+ col3.setAttribute('style', 'width:50%;');
1330
+ tr.appendChild(col3);
1331
+ }
1332
+
1333
+ table.appendChild(tr);
1334
+ comment = _solidLogic.solidLogicSingleton.store.any(ws, ns.rdfs('comment'));
1335
+ comment = comment ? comment.value : 'Use this workspace';
1336
+ col2.addEventListener('click', function (_event) {
1337
+ col3.textContent = comment ? comment.value : '';
1338
+ col3.setAttribute('style', deselectedStyle + style);
1339
+ var button = dom.createElement('button');
1340
+ button.textContent = 'Continue'; // button.setAttribute('style', style);
1341
+
1342
+ var newBase = figureOutBase(ws);
1343
+ baseField.value = newBase; // show user proposed URI
1344
+
1345
+ button.addEventListener('click', function (_event) {
1346
+ button.disabled = true;
1347
+ callbackWS(ws, newBase);
1348
+ button.textContent = '---->';
1349
+ }, true); // capture vs bubble
1350
+
1351
+ col3.appendChild(button);
1352
+ }, true); // capture vs bubble
1353
+ } // last line with "Make new workspace"
1354
+
1355
+
1356
+ var trLast = dom.createElement('tr');
1357
+ col2 = dom.createElement('td');
1358
+ col2.setAttribute('style', cellStyle);
1359
+ col2.textContent = '+ Make a new workspace';
1360
+ col2.addEventListener('click', makeNewWorkspace);
1361
+ trLast.appendChild(col2);
1362
+ table.appendChild(trLast);
1363
+ } // displayOptions
1364
+ // console.log('kicking off async operation')
1365
+
1366
+
1367
+ ensureLoadedPreferences(context) // kick off async operation
1368
+ .then(displayOptions)["catch"](function (err) {
1369
+ // console.log("err from async op")
1370
+ box.appendChild(widgets.errorMessageBlock(context.dom, err));
1371
+ });
1372
+ return box; // return the box element, while login proceeds
1373
+ } // selectWorkspace
1374
+
1375
+ /**
1376
+ * Creates a new instance of an app.
1377
+ *
1378
+ * An instance of an app could be e.g. an issue tracker for a given project,
1379
+ * or a chess game, or calendar, or a health/fitness record for a person.
1380
+ *
1381
+ * Note that this use of the term 'app' refers more to entries in the user's
1382
+ * type index than to actual software applications that use the personal data
1383
+ * to which these entries point.
1384
+ *
1385
+ * @param dom
1386
+ * @param appDetails
1387
+ * @param callback
1388
+ *
1389
+ * @returns A div with a button in it for making a new app instance
1390
+ */
1391
+
1392
+
1393
+ function newAppInstance(dom, appDetails, callback) {
1394
+ var gotWS = function gotWS(ws, base) {
1395
+ // log.debug("newAppInstance: Selected workspace = " + (ws? ws.uri : 'none'))
1396
+ callback(ws, base);
1397
+ };
1398
+
1399
+ var div = dom.createElement('div');
1400
+ var b = dom.createElement('button');
1401
+ b.setAttribute('type', 'button');
1402
+ div.appendChild(b);
1403
+ b.innerHTML = "Make new ".concat(appDetails.noun);
1404
+ b.addEventListener('click', function (_event) {
1405
+ div.appendChild(selectWorkspace(dom, appDetails, gotWS));
1406
+ }, false);
1407
+ div.appendChild(b);
1408
+ return div;
1409
+ }
1410
+ /**
1411
+ * Retrieves whether the currently logged in user is a power user
1412
+ * and/or a developer
1413
+ */
1414
+
1415
+
1416
+ function getUserRoles() {
1417
+ return _getUserRoles.apply(this, arguments);
1418
+ }
1419
+ /**
1420
+ * Filters which panes should be available, based on the result of [[getUserRoles]]
1421
+ */
1422
+
1423
+
1424
+ function _getUserRoles() {
1425
+ _getUserRoles = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee9() {
1426
+ var _yield$ensureLoadedPr, me, preferencesFile, preferencesFileError;
1427
+
1428
+ return _regenerator["default"].wrap(function _callee9$(_context9) {
1429
+ while (1) {
1430
+ switch (_context9.prev = _context9.next) {
1431
+ case 0:
1432
+ _context9.prev = 0;
1433
+ _context9.next = 3;
1434
+ return ensureLoadedPreferences({});
1435
+
1436
+ case 3:
1437
+ _yield$ensureLoadedPr = _context9.sent;
1438
+ me = _yield$ensureLoadedPr.me;
1439
+ preferencesFile = _yield$ensureLoadedPr.preferencesFile;
1440
+ preferencesFileError = _yield$ensureLoadedPr.preferencesFileError;
1441
+
1442
+ if (!(!preferencesFile || preferencesFileError)) {
1443
+ _context9.next = 9;
1444
+ break;
1445
+ }
1446
+
1447
+ throw new Error(preferencesFileError);
1448
+
1449
+ case 9:
1450
+ return _context9.abrupt("return", _solidLogic.solidLogicSingleton.store.each(me, ns.rdf('type'), null, preferencesFile.doc()));
1451
+
1452
+ case 12:
1453
+ _context9.prev = 12;
1454
+ _context9.t0 = _context9["catch"](0);
1455
+ debug.warn('Unable to fetch your preferences - this was the error: ', _context9.t0);
1456
+
1457
+ case 15:
1458
+ return _context9.abrupt("return", []);
1459
+
1460
+ case 16:
1461
+ case "end":
1462
+ return _context9.stop();
1463
+ }
1464
+ }
1465
+ }, _callee9, null, [[0, 12]]);
1466
+ }));
1467
+ return _getUserRoles.apply(this, arguments);
1468
+ }
1469
+
1470
+ function filterAvailablePanes(_x14) {
1471
+ return _filterAvailablePanes.apply(this, arguments);
1472
+ }
1473
+
1474
+ function _filterAvailablePanes() {
1475
+ _filterAvailablePanes = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee10(panes) {
1476
+ var userRoles;
1477
+ return _regenerator["default"].wrap(function _callee10$(_context10) {
1478
+ while (1) {
1479
+ switch (_context10.prev = _context10.next) {
1480
+ case 0:
1481
+ _context10.next = 2;
1482
+ return getUserRoles();
1483
+
1484
+ case 2:
1485
+ userRoles = _context10.sent;
1486
+ return _context10.abrupt("return", panes.filter(function (pane) {
1487
+ return isMatchingAudience(pane, userRoles);
1488
+ }));
1489
+
1490
+ case 4:
1491
+ case "end":
1492
+ return _context10.stop();
1493
+ }
1494
+ }
1495
+ }, _callee10);
1496
+ }));
1497
+ return _filterAvailablePanes.apply(this, arguments);
1498
+ }
1499
+
1500
+ function isMatchingAudience(pane, userRoles) {
1501
+ var audience = pane.audience || [];
1502
+ return audience.reduce(function (isMatch, audienceRole) {
1503
+ return isMatch && !!userRoles.find(function (role) {
1504
+ return role.equals(audienceRole);
1505
+ });
1506
+ }, true);
1507
+ }
1508
+ //# sourceMappingURL=login.js.map