solid-ui 2.6.1 → 3.0.0-63a1640

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 (369) hide show
  1. package/LICENSE.md +3 -1
  2. package/README.md +236 -30
  3. package/dist/acl/access-controller.js +238 -0
  4. package/dist/acl/access-controller.js.map +1 -0
  5. package/{lib → dist}/acl/access-groups.d.ts +2 -2
  6. package/{lib → dist}/acl/access-groups.d.ts.map +1 -1
  7. package/dist/acl/access-groups.js +323 -0
  8. package/dist/acl/access-groups.js.map +1 -0
  9. package/dist/acl/acl-control.js +173 -0
  10. package/dist/acl/acl-control.js.map +1 -0
  11. package/dist/acl/acl.js +495 -0
  12. package/dist/acl/acl.js.map +1 -0
  13. package/dist/acl/add-agent-buttons.js +217 -0
  14. package/dist/acl/add-agent-buttons.js.map +1 -0
  15. package/dist/acl/index.js +32 -0
  16. package/dist/acl/index.js.map +1 -0
  17. package/dist/acl/types.js +6 -0
  18. package/dist/acl/types.js.map +1 -0
  19. package/dist/chat/keys.js +106 -0
  20. package/dist/chat/keys.js.map +1 -0
  21. package/dist/chat/signature.js +63 -0
  22. package/dist/chat/signature.js.map +1 -0
  23. package/dist/create/create.js +249 -0
  24. package/dist/create/create.js.map +1 -0
  25. package/dist/create/index.js +5 -0
  26. package/dist/create/index.js.map +1 -0
  27. package/dist/create/types.js +2 -0
  28. package/dist/create/types.js.map +1 -0
  29. package/dist/debug.d.ts.map +1 -0
  30. package/dist/debug.js +13 -0
  31. package/dist/debug.js.map +1 -0
  32. package/dist/footer/index.js +67 -0
  33. package/dist/footer/index.js.map +1 -0
  34. package/dist/header/empty-profile.js +11 -0
  35. package/dist/header/empty-profile.js.map +1 -0
  36. package/dist/header/index.js +260 -0
  37. package/dist/header/index.js.map +1 -0
  38. package/dist/iconBase.js +37 -0
  39. package/dist/iconBase.js.map +1 -0
  40. package/dist/icons/solid_logo.js.map +1 -0
  41. package/{lib → dist}/index.d.ts +7 -9
  42. package/dist/index.d.ts.map +1 -0
  43. package/dist/index.js +102 -0
  44. package/dist/index.js.map +1 -0
  45. package/{lib → dist}/log.d.ts.map +1 -1
  46. package/dist/log.js +182 -0
  47. package/dist/log.js.map +1 -0
  48. package/dist/login/login.js +858 -0
  49. package/dist/login/login.js.map +1 -0
  50. package/dist/matrix/index.js +5 -0
  51. package/dist/matrix/index.js.map +1 -0
  52. package/dist/matrix/matrix.js +217 -0
  53. package/dist/matrix/matrix.js.map +1 -0
  54. package/dist/matrix/types.js +2 -0
  55. package/dist/matrix/types.js.map +1 -0
  56. package/dist/media/index.js +6 -0
  57. package/dist/media/index.js.map +1 -0
  58. package/dist/media/media-capture.js +161 -0
  59. package/dist/media/media-capture.js.map +1 -0
  60. package/dist/pad.js +775 -0
  61. package/dist/pad.js.map +1 -0
  62. package/{lib → dist}/participation.d.ts.map +1 -1
  63. package/dist/participation.js +184 -0
  64. package/dist/participation.js.map +1 -0
  65. package/dist/solid-ui.esm.js +25531 -0
  66. package/dist/solid-ui.esm.js.map +1 -0
  67. package/dist/solid-ui.esm.min.js +43 -0
  68. package/dist/solid-ui.esm.min.js.map +1 -0
  69. package/dist/solid-ui.js +23479 -68931
  70. package/dist/solid-ui.js.map +1 -1
  71. package/dist/solid-ui.min.js +40 -2
  72. package/dist/solid-ui.min.js.map +1 -1
  73. package/dist/tabs.js +388 -0
  74. package/dist/tabs.js.map +1 -0
  75. package/{lib → dist}/utils/headerFooterHelpers.d.ts.map +1 -1
  76. package/dist/utils/headerFooterHelpers.js +114 -0
  77. package/dist/utils/headerFooterHelpers.js.map +1 -0
  78. package/dist/utils/keyHelpers/accessData.js +64 -0
  79. package/dist/utils/keyHelpers/accessData.js.map +1 -0
  80. package/dist/utils/keyHelpers/acl.js +74 -0
  81. package/dist/utils/keyHelpers/acl.js.map +1 -0
  82. package/dist/utils/keyHelpers/otherHelpers.js +13 -0
  83. package/dist/utils/keyHelpers/otherHelpers.js.map +1 -0
  84. package/dist/utils/label.js +111 -0
  85. package/dist/utils/label.js.map +1 -0
  86. package/dist/versionInfo.js +30 -0
  87. package/dist/versionInfo.js.map +1 -0
  88. package/dist/widgets/buttons/iconLinks.js +44 -0
  89. package/dist/widgets/buttons/iconLinks.js.map +1 -0
  90. package/dist/widgets/buttons.js +1280 -0
  91. package/dist/widgets/buttons.js.map +1 -0
  92. package/dist/widgets/error.d.ts +14 -0
  93. package/dist/widgets/error.d.ts.map +1 -0
  94. package/dist/widgets/error.js +35 -0
  95. package/dist/widgets/error.js.map +1 -0
  96. package/dist/widgets/forms/autocomplete/autocompleteBar.js +123 -0
  97. package/dist/widgets/forms/autocomplete/autocompleteBar.js.map +1 -0
  98. package/dist/widgets/forms/autocomplete/autocompleteField.js +199 -0
  99. package/dist/widgets/forms/autocomplete/autocompleteField.js.map +1 -0
  100. package/dist/widgets/forms/autocomplete/autocompletePicker.js +256 -0
  101. package/dist/widgets/forms/autocomplete/autocompletePicker.js.map +1 -0
  102. package/dist/widgets/forms/autocomplete/language.js +104 -0
  103. package/dist/widgets/forms/autocomplete/language.js.map +1 -0
  104. package/dist/widgets/forms/autocomplete/publicData.js +460 -0
  105. package/dist/widgets/forms/autocomplete/publicData.js.map +1 -0
  106. package/dist/widgets/forms/basic.js +241 -0
  107. package/dist/widgets/forms/basic.js.map +1 -0
  108. package/dist/widgets/forms/comment.js +46 -0
  109. package/dist/widgets/forms/comment.js.map +1 -0
  110. package/dist/widgets/forms/fieldFunction.js +44 -0
  111. package/dist/widgets/forms/fieldFunction.js.map +1 -0
  112. package/dist/widgets/forms/fieldParams.js +89 -0
  113. package/dist/widgets/forms/fieldParams.js.map +1 -0
  114. package/{lib → dist}/widgets/forms/formStyle.d.ts.map +1 -1
  115. package/dist/widgets/forms/formStyle.js +36 -0
  116. package/dist/widgets/forms/formStyle.js.map +1 -0
  117. package/{lib → dist}/widgets/widgetHelpers.d.ts.map +1 -1
  118. package/{lib → dist}/widgets/widgetHelpers.js +14 -25
  119. package/dist/widgets/widgetHelpers.js.map +1 -0
  120. package/package.json +48 -52
  121. package/dist/789.solid-ui.min.js +0 -1
  122. package/dist/841.solid-ui.min.js +0 -3
  123. package/dist/841.solid-ui.min.js.LICENSE.txt +0 -58
  124. package/dist/841.solid-ui.min.js.map +0 -1
  125. package/dist/_2b19.solid-ui.js +0 -14
  126. package/dist/_2b19.solid-ui.js.map +0 -1
  127. package/dist/index.html +0 -1
  128. package/dist/solid-ui.min.js.LICENSE.txt +0 -57
  129. package/dist/vendors-node_modules_jsonld_lib_jsonld_js.solid-ui.js +0 -12247
  130. package/dist/vendors-node_modules_jsonld_lib_jsonld_js.solid-ui.js.map +0 -1
  131. package/lib/acl/access-controller.js +0 -391
  132. package/lib/acl/access-controller.js.map +0 -1
  133. package/lib/acl/access-groups.js +0 -507
  134. package/lib/acl/access-groups.js.map +0 -1
  135. package/lib/acl/acl-control.js +0 -237
  136. package/lib/acl/acl-control.js.map +0 -1
  137. package/lib/acl/acl.js +0 -517
  138. package/lib/acl/acl.js.map +0 -1
  139. package/lib/acl/add-agent-buttons.js +0 -434
  140. package/lib/acl/add-agent-buttons.js.map +0 -1
  141. package/lib/acl/index.js +0 -39
  142. package/lib/acl/index.js.map +0 -1
  143. package/lib/acl/types.js +0 -6
  144. package/lib/acl/types.js.map +0 -1
  145. package/lib/chat/bookmarks.js +0 -303
  146. package/lib/chat/bookmarks.js.map +0 -1
  147. package/lib/chat/chatLogic.js +0 -420
  148. package/lib/chat/chatLogic.js.map +0 -1
  149. package/lib/chat/dateFolder.js +0 -328
  150. package/lib/chat/dateFolder.js.map +0 -1
  151. package/lib/chat/infinite.js +0 -994
  152. package/lib/chat/infinite.js.map +0 -1
  153. package/lib/chat/keys.js +0 -232
  154. package/lib/chat/keys.js.map +0 -1
  155. package/lib/chat/message.js +0 -715
  156. package/lib/chat/message.js.map +0 -1
  157. package/lib/chat/messageTools.js +0 -538
  158. package/lib/chat/messageTools.js.map +0 -1
  159. package/lib/chat/signature.js +0 -109
  160. package/lib/chat/signature.js.map +0 -1
  161. package/lib/chat/thread.js +0 -535
  162. package/lib/chat/thread.js.map +0 -1
  163. package/lib/create/create.js +0 -242
  164. package/lib/create/create.js.map +0 -1
  165. package/lib/create/index.js +0 -11
  166. package/lib/create/index.js.map +0 -1
  167. package/lib/create/types.js +0 -6
  168. package/lib/create/types.js.map +0 -1
  169. package/lib/debug.d.ts.map +0 -1
  170. package/lib/debug.js +0 -30
  171. package/lib/debug.js.map +0 -1
  172. package/lib/folders.js +0 -132
  173. package/lib/folders.js.map +0 -1
  174. package/lib/footer/index.js +0 -123
  175. package/lib/footer/index.js.map +0 -1
  176. package/lib/header/empty-profile.js +0 -8
  177. package/lib/header/empty-profile.js.map +0 -1
  178. package/lib/header/index.js +0 -375
  179. package/lib/header/index.js.map +0 -1
  180. package/lib/iconBase.js +0 -44
  181. package/lib/iconBase.js.map +0 -1
  182. package/lib/icons/solid_logo.js.map +0 -1
  183. package/lib/index.d.ts.map +0 -1
  184. package/lib/index.js +0 -223
  185. package/lib/index.js.map +0 -1
  186. package/lib/log.js +0 -213
  187. package/lib/log.js.map +0 -1
  188. package/lib/login/login.js +0 -1241
  189. package/lib/login/login.js.map +0 -1
  190. package/lib/matrix/index.js +0 -11
  191. package/lib/matrix/index.js.map +0 -1
  192. package/lib/matrix/matrix.js +0 -216
  193. package/lib/matrix/matrix.js.map +0 -1
  194. package/lib/matrix/types.js +0 -6
  195. package/lib/matrix/types.js.map +0 -1
  196. package/lib/media/index.js +0 -12
  197. package/lib/media/index.js.map +0 -1
  198. package/lib/media/media-capture.js +0 -194
  199. package/lib/media/media-capture.js.map +0 -1
  200. package/lib/messageArea.js +0 -319
  201. package/lib/messageArea.js.map +0 -1
  202. package/lib/noun_Camera_1618446_000000.js +0 -8
  203. package/lib/noun_Camera_1618446_000000.js.map +0 -1
  204. package/lib/ns.js +0 -17
  205. package/lib/ns.js.map +0 -1
  206. package/lib/pad.js +0 -805
  207. package/lib/pad.js.map +0 -1
  208. package/lib/participation.js +0 -219
  209. package/lib/participation.js.map +0 -1
  210. package/lib/preferences.js +0 -215
  211. package/lib/preferences.js.map +0 -1
  212. package/lib/signup/config-default.js +0 -43
  213. package/lib/signup/config-default.js.map +0 -1
  214. package/lib/signup/signup.js +0 -74
  215. package/lib/signup/signup.js.map +0 -1
  216. package/lib/stories/decorators.js +0 -10
  217. package/lib/stories/decorators.js.map +0 -1
  218. package/lib/style.js +0 -158
  219. package/lib/style.js.map +0 -1
  220. package/lib/styleConstants.js +0 -35
  221. package/lib/styleConstants.js.map +0 -1
  222. package/lib/style_multiSelect.js +0 -62
  223. package/lib/style_multiSelect.js.map +0 -1
  224. package/lib/table.js +0 -1573
  225. package/lib/table.js.map +0 -1
  226. package/lib/tabs.js +0 -448
  227. package/lib/tabs.js.map +0 -1
  228. package/lib/typings.d.js +0 -2
  229. package/lib/typings.d.js.map +0 -1
  230. package/lib/utils/headerFooterHelpers.js +0 -165
  231. package/lib/utils/headerFooterHelpers.js.map +0 -1
  232. package/lib/utils/index.js +0 -527
  233. package/lib/utils/index.js.map +0 -1
  234. package/lib/utils/keyHelpers/accessData.js +0 -131
  235. package/lib/utils/keyHelpers/accessData.js.map +0 -1
  236. package/lib/utils/keyHelpers/acl.js +0 -90
  237. package/lib/utils/keyHelpers/acl.js.map +0 -1
  238. package/lib/utils/keyHelpers/otherHelpers.js +0 -21
  239. package/lib/utils/keyHelpers/otherHelpers.js.map +0 -1
  240. package/lib/utils/label.js +0 -103
  241. package/lib/utils/label.js.map +0 -1
  242. package/lib/versionInfo.d.ts +0 -32
  243. package/lib/versionInfo.d.ts.map +0 -1
  244. package/lib/versionInfo.js +0 -37
  245. package/lib/versionInfo.js.map +0 -1
  246. package/lib/widgets/buttons/iconLinks.js +0 -53
  247. package/lib/widgets/buttons/iconLinks.js.map +0 -1
  248. package/lib/widgets/buttons.js +0 -1306
  249. package/lib/widgets/buttons.js.map +0 -1
  250. package/lib/widgets/dragAndDrop.js +0 -194
  251. package/lib/widgets/dragAndDrop.js.map +0 -1
  252. package/lib/widgets/error.d.ts +0 -2
  253. package/lib/widgets/error.d.ts.map +0 -1
  254. package/lib/widgets/error.js +0 -46
  255. package/lib/widgets/error.js.map +0 -1
  256. package/lib/widgets/forms/autocomplete/autocompleteBar.js +0 -271
  257. package/lib/widgets/forms/autocomplete/autocompleteBar.js.map +0 -1
  258. package/lib/widgets/forms/autocomplete/autocompleteField.js +0 -258
  259. package/lib/widgets/forms/autocomplete/autocompleteField.js.map +0 -1
  260. package/lib/widgets/forms/autocomplete/autocompletePicker.js +0 -436
  261. package/lib/widgets/forms/autocomplete/autocompletePicker.js.map +0 -1
  262. package/lib/widgets/forms/autocomplete/language.js +0 -189
  263. package/lib/widgets/forms/autocomplete/language.js.map +0 -1
  264. package/lib/widgets/forms/autocomplete/publicData.js +0 -636
  265. package/lib/widgets/forms/autocomplete/publicData.js.map +0 -1
  266. package/lib/widgets/forms/basic.js +0 -254
  267. package/lib/widgets/forms/basic.js.map +0 -1
  268. package/lib/widgets/forms/comment.js +0 -54
  269. package/lib/widgets/forms/comment.js.map +0 -1
  270. package/lib/widgets/forms/fieldFunction.js +0 -52
  271. package/lib/widgets/forms/fieldFunction.js.map +0 -1
  272. package/lib/widgets/forms/fieldParams.js +0 -77
  273. package/lib/widgets/forms/fieldParams.js.map +0 -1
  274. package/lib/widgets/forms/formStyle.js +0 -44
  275. package/lib/widgets/forms/formStyle.js.map +0 -1
  276. package/lib/widgets/forms.js +0 -2045
  277. package/lib/widgets/forms.js.map +0 -1
  278. package/lib/widgets/index.js +0 -110
  279. package/lib/widgets/index.js.map +0 -1
  280. package/lib/widgets/multiSelect.js +0 -658
  281. package/lib/widgets/multiSelect.js.map +0 -1
  282. package/lib/widgets/peoplePicker.js +0 -467
  283. package/lib/widgets/peoplePicker.js.map +0 -1
  284. package/lib/widgets/widgetHelpers.js.map +0 -1
  285. /package/{lib → dist}/acl/access-controller.d.ts +0 -0
  286. /package/{lib → dist}/acl/access-controller.d.ts.map +0 -0
  287. /package/{lib → dist}/acl/acl-control.d.ts +0 -0
  288. /package/{lib → dist}/acl/acl-control.d.ts.map +0 -0
  289. /package/{lib → dist}/acl/acl.d.ts +0 -0
  290. /package/{lib → dist}/acl/acl.d.ts.map +0 -0
  291. /package/{lib → dist}/acl/add-agent-buttons.d.ts +0 -0
  292. /package/{lib → dist}/acl/add-agent-buttons.d.ts.map +0 -0
  293. /package/{lib → dist}/acl/index.d.ts +0 -0
  294. /package/{lib → dist}/acl/index.d.ts.map +0 -0
  295. /package/{lib → dist}/acl/types.d.ts +0 -0
  296. /package/{lib → dist}/acl/types.d.ts.map +0 -0
  297. /package/{lib → dist}/chat/keys.d.ts +0 -0
  298. /package/{lib → dist}/chat/keys.d.ts.map +0 -0
  299. /package/{lib → dist}/chat/signature.d.ts +0 -0
  300. /package/{lib → dist}/chat/signature.d.ts.map +0 -0
  301. /package/{lib → dist}/create/create.d.ts +0 -0
  302. /package/{lib → dist}/create/create.d.ts.map +0 -0
  303. /package/{lib → dist}/create/index.d.ts +0 -0
  304. /package/{lib → dist}/create/index.d.ts.map +0 -0
  305. /package/{lib → dist}/create/types.d.ts +0 -0
  306. /package/{lib → dist}/create/types.d.ts.map +0 -0
  307. /package/{lib → dist}/debug.d.ts +0 -0
  308. /package/{lib → dist}/footer/index.d.ts +0 -0
  309. /package/{lib → dist}/footer/index.d.ts.map +0 -0
  310. /package/{lib → dist}/header/empty-profile.d.ts +0 -0
  311. /package/{lib → dist}/header/empty-profile.d.ts.map +0 -0
  312. /package/{lib → dist}/header/index.d.ts +0 -0
  313. /package/{lib → dist}/header/index.d.ts.map +0 -0
  314. /package/{lib → dist}/iconBase.d.ts +0 -0
  315. /package/{lib → dist}/iconBase.d.ts.map +0 -0
  316. /package/{lib → dist}/icons/solid_logo.d.ts +0 -0
  317. /package/{lib → dist}/icons/solid_logo.d.ts.map +0 -0
  318. /package/{lib → dist}/icons/solid_logo.js +0 -0
  319. /package/{lib → dist}/log.d.ts +0 -0
  320. /package/{lib → dist}/login/login.d.ts +0 -0
  321. /package/{lib → dist}/login/login.d.ts.map +0 -0
  322. /package/{lib → dist}/matrix/index.d.ts +0 -0
  323. /package/{lib → dist}/matrix/index.d.ts.map +0 -0
  324. /package/{lib → dist}/matrix/matrix.d.ts +0 -0
  325. /package/{lib → dist}/matrix/matrix.d.ts.map +0 -0
  326. /package/{lib → dist}/matrix/types.d.ts +0 -0
  327. /package/{lib → dist}/matrix/types.d.ts.map +0 -0
  328. /package/{lib → dist}/media/index.d.ts +0 -0
  329. /package/{lib → dist}/media/index.d.ts.map +0 -0
  330. /package/{lib → dist}/media/media-capture.d.ts +0 -0
  331. /package/{lib → dist}/media/media-capture.d.ts.map +0 -0
  332. /package/{lib → dist}/pad.d.ts +0 -0
  333. /package/{lib → dist}/pad.d.ts.map +0 -0
  334. /package/{lib → dist}/participation.d.ts +0 -0
  335. /package/{lib → dist}/tabs.d.ts +0 -0
  336. /package/{lib → dist}/tabs.d.ts.map +0 -0
  337. /package/{lib → dist}/utils/headerFooterHelpers.d.ts +0 -0
  338. /package/{lib → dist}/utils/keyHelpers/accessData.d.ts +0 -0
  339. /package/{lib → dist}/utils/keyHelpers/accessData.d.ts.map +0 -0
  340. /package/{lib → dist}/utils/keyHelpers/acl.d.ts +0 -0
  341. /package/{lib → dist}/utils/keyHelpers/acl.d.ts.map +0 -0
  342. /package/{lib → dist}/utils/keyHelpers/otherHelpers.d.ts +0 -0
  343. /package/{lib → dist}/utils/keyHelpers/otherHelpers.d.ts.map +0 -0
  344. /package/{lib → dist}/utils/label.d.ts +0 -0
  345. /package/{lib → dist}/utils/label.d.ts.map +0 -0
  346. /package/{lib → dist}/widgets/buttons/iconLinks.d.ts +0 -0
  347. /package/{lib → dist}/widgets/buttons/iconLinks.d.ts.map +0 -0
  348. /package/{lib → dist}/widgets/buttons.d.ts +0 -0
  349. /package/{lib → dist}/widgets/buttons.d.ts.map +0 -0
  350. /package/{lib → dist}/widgets/forms/autocomplete/autocompleteBar.d.ts +0 -0
  351. /package/{lib → dist}/widgets/forms/autocomplete/autocompleteBar.d.ts.map +0 -0
  352. /package/{lib → dist}/widgets/forms/autocomplete/autocompleteField.d.ts +0 -0
  353. /package/{lib → dist}/widgets/forms/autocomplete/autocompleteField.d.ts.map +0 -0
  354. /package/{lib → dist}/widgets/forms/autocomplete/autocompletePicker.d.ts +0 -0
  355. /package/{lib → dist}/widgets/forms/autocomplete/autocompletePicker.d.ts.map +0 -0
  356. /package/{lib → dist}/widgets/forms/autocomplete/language.d.ts +0 -0
  357. /package/{lib → dist}/widgets/forms/autocomplete/language.d.ts.map +0 -0
  358. /package/{lib → dist}/widgets/forms/autocomplete/publicData.d.ts +0 -0
  359. /package/{lib → dist}/widgets/forms/autocomplete/publicData.d.ts.map +0 -0
  360. /package/{lib → dist}/widgets/forms/basic.d.ts +0 -0
  361. /package/{lib → dist}/widgets/forms/basic.d.ts.map +0 -0
  362. /package/{lib → dist}/widgets/forms/comment.d.ts +0 -0
  363. /package/{lib → dist}/widgets/forms/comment.d.ts.map +0 -0
  364. /package/{lib → dist}/widgets/forms/fieldFunction.d.ts +0 -0
  365. /package/{lib → dist}/widgets/forms/fieldFunction.d.ts.map +0 -0
  366. /package/{lib → dist}/widgets/forms/fieldParams.d.ts +0 -0
  367. /package/{lib → dist}/widgets/forms/fieldParams.d.ts.map +0 -0
  368. /package/{lib → dist}/widgets/forms/formStyle.d.ts +0 -0
  369. /package/{lib → dist}/widgets/widgetHelpers.d.ts +0 -0
@@ -1,1306 +0,0 @@
1
- "use strict";
2
-
3
- var _typeof = require("@babel/runtime/helpers/typeof");
4
- Object.defineProperty(exports, "__esModule", {
5
- value: true
6
- });
7
- exports.addStyleSheet = addStyleSheet;
8
- exports.allClassURIs = allClassURIs;
9
- exports.askName = askName;
10
- exports.attachmentList = attachmentList;
11
- exports.button = button;
12
- exports.cancelButton = cancelButton;
13
- exports.clearElement = clearElement;
14
- exports.complain = complain;
15
- exports.continueButton = continueButton;
16
- exports.createLinkDiv = createLinkDiv;
17
- exports.createNameDiv = createNameDiv;
18
- exports.defaultAnnotationStore = defaultAnnotationStore;
19
- exports.deleteButtonWithCheck = deleteButtonWithCheck;
20
- exports.extractLogURI = extractLogURI;
21
- exports.faviconOrDefault = faviconOrDefault;
22
- exports.fileUploadButtonDiv = fileUploadButtonDiv;
23
- exports.findImage = findImage;
24
- exports.findImageFromURI = findImageFromURI;
25
- exports.formatDateTime = formatDateTime;
26
- exports.iconForClass = void 0;
27
- exports.imagesOf = imagesOf;
28
- exports.index = void 0;
29
- exports.isAudio = isAudio;
30
- exports.isImage = isImage;
31
- exports.isVideo = isVideo;
32
- exports.linkButton = linkButton;
33
- exports.openHrefInOutlineMode = openHrefInOutlineMode;
34
- exports.personTR = void 0;
35
- exports.propertyTriage = propertyTriage;
36
- exports.refreshTree = refreshTree;
37
- exports.removeButton = removeButton;
38
- exports.renderAsDiv = renderAsDiv;
39
- exports.renderAsRow = renderAsRow;
40
- exports.selectorPanel = selectorPanel;
41
- exports.selectorPanelRefresh = selectorPanelRefresh;
42
- exports.setImage = setImage;
43
- exports.setName = setName;
44
- exports.shortDate = shortDate;
45
- exports.shortTime = shortTime;
46
- exports.timestamp = timestamp;
47
- var _rdflib = require("rdflib");
48
- var _iconBase = require("../iconBase");
49
- var ns = _interopRequireWildcard(require("../ns"));
50
- var style = _interopRequireWildcard(require("../style"));
51
- var debug = _interopRequireWildcard(require("../debug"));
52
- var _log = require("../log");
53
- var _dragAndDrop = require("./dragAndDrop");
54
- var _solidLogic = require("solid-logic");
55
- var utils = _interopRequireWildcard(require("../utils"));
56
- var _error = require("./error");
57
- var _widgetHelpers = require("./widgetHelpers");
58
- var _iconLinks = require("./buttons/iconLinks");
59
- function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
60
- /* Buttons
61
- */
62
-
63
- /**
64
- * UI Widgets such as buttons
65
- * @packageDocumentation
66
- */
67
-
68
- /* global alert */
69
-
70
- var iconBase = _iconBase.icons.iconBase;
71
- var cancelIconURI = iconBase + 'noun_1180156.svg'; // black X
72
- var checkIconURI = iconBase + 'noun_1180158.svg'; // green checkmark; Continue
73
-
74
- function getStatusArea(context) {
75
- var box = context && context.statusArea || context && context.div || null;
76
- if (box) return box;
77
- var dom = context && context.dom;
78
- if (!dom && typeof document !== 'undefined') {
79
- dom = document;
80
- }
81
- if (dom) {
82
- var body = dom.getElementsByTagName('body')[0];
83
- box = dom.createElement('div');
84
- body.insertBefore(box, body.firstElementChild);
85
- if (context) {
86
- context.statusArea = box;
87
- }
88
- return box;
89
- }
90
- return null;
91
- }
92
-
93
- /**
94
- * Display an error message block
95
- */
96
- function complain(context, err) {
97
- if (!err) return; // only if error
98
- var ele = getStatusArea(context);
99
- debug.log('Complaint: ' + err);
100
- if (ele) ele.appendChild((0, _error.errorMessageBlock)(context && context.dom || document, err));else alert(err);
101
- }
102
-
103
- /**
104
- * Remove all the children of an HTML element
105
- */
106
- function clearElement(ele) {
107
- while (ele.firstChild) {
108
- ele.removeChild(ele.firstChild);
109
- }
110
- return ele;
111
- }
112
-
113
- /**
114
- * To figure out the log URI from the full URI used to invoke the reasoner
115
- */
116
- function extractLogURI(fullURI) {
117
- var logPos = fullURI.search(/logFile=/);
118
- var rulPos = fullURI.search(/&rulesFile=/);
119
- return fullURI.substring(logPos + 8, rulPos);
120
- }
121
-
122
- /**
123
- * By default, converts e.g. '2020-02-19T19:35:28.557Z' to '19:35'
124
- * if today is 19 Feb 2020, and to 'Feb 19' if not.
125
- * @@@ TODO This needs to be changed to local time
126
- * @param noTime Return a string like 'Feb 19' even if it's today.
127
- */
128
- function shortDate(str, noTime) {
129
- if (!str) return '???';
130
- var month = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
131
- try {
132
- var nowZ = new Date().toISOString();
133
- // var nowZ = $rdf.term(now).value
134
- // var n = now.getTimezoneOffset() // Minutes
135
- if (str.slice(0, 10) === nowZ.slice(0, 10) && !noTime) {
136
- return str.slice(11, 16);
137
- }
138
- if (str.slice(0, 4) === nowZ.slice(0, 4)) {
139
- return month[parseInt(str.slice(5, 7), 10) - 1] + ' ' + parseInt(str.slice(8, 10), 10);
140
- }
141
- return str.slice(0, 10);
142
- } catch (e) {
143
- return 'shortdate:' + e;
144
- }
145
- }
146
-
147
- /**
148
- * Format a date and time
149
- * @param date for instance `new Date()`
150
- * @param format for instance '{FullYear}-{Month}-{Date}T{Hours}:{Minutes}:{Seconds}.{Milliseconds}'
151
- * @returns for instance '2000-01-15T23:14:23.002'
152
- */
153
- function formatDateTime(date, format) {
154
- return format.split('{').map(function (s) {
155
- var k = s.split('}')[0];
156
- var width = {
157
- Milliseconds: 3,
158
- FullYear: 4
159
- };
160
- var d = {
161
- Month: 1
162
- };
163
- return s ? ('000' + (date['get' + k]() + (d[k] || 0))).slice(-(width[k] || 2)) + s.split('}')[1] : '';
164
- }).join('');
165
- }
166
-
167
- /**
168
- * Get a string representation of the current time
169
- * @returns for instance '2000-01-15T23:14:23.002'
170
- */
171
- function timestamp() {
172
- return formatDateTime(new Date(), '{FullYear}-{Month}-{Date}T{Hours}:{Minutes}:{Seconds}.{Milliseconds}');
173
- }
174
-
175
- /**
176
- * Get a short string representation of the current time
177
- * @returns for instance '23:14:23.002'
178
- */
179
- function shortTime() {
180
- return formatDateTime(new Date(), '{Hours}:{Minutes}:{Seconds}.{Milliseconds}');
181
- }
182
-
183
- // ///////////////////// Handy UX widgets
184
-
185
- /**
186
- * Sets the best name we have and looks up a better one
187
- */
188
- function setName(element, x) {
189
- var kb = _solidLogic.store;
190
- var findName = function findName(x) {
191
- var name = kb.any(x, ns.vcard('fn')) || kb.any(x, ns.foaf('name')) || kb.any(x, ns.vcard('organization-name'));
192
- return name ? name.value : null;
193
- };
194
- var name = x.sameTerm(ns.foaf('Agent')) ? 'Everyone' : findName(x);
195
- element.textContent = name || utils.label(x);
196
- if (!name && x.uri) {
197
- if (!kb.fetcher) {
198
- throw new Error('kb has no fetcher');
199
- }
200
- // Note this is only a fetch, not a lookUP of all sameAs etc
201
- kb.fetcher.nowOrWhenFetched(x.doc(), undefined, function (_ok) {
202
- element.textContent = findName(x) || utils.label(x); // had: (ok ? '' : '? ') +
203
- });
204
- }
205
- }
206
-
207
- /**
208
- * Set of suitable images
209
- * See also [[findImage]]
210
- * @param x The thing for which we want to find an image
211
- * @param kb The RDF store to look in
212
- * @returns It goes looking for triples in `kb`,
213
- * `(subject: x), (predicate: see list below) (object: image-url)`
214
- * to find any image linked from the thing with one of the following
215
- * predicates (in order):
216
- * * ns.sioc('avatar')
217
- * * ns.foaf('img')
218
- * * ns.vcard('logo')
219
- * * ns.vcard('hasPhoto')
220
- * * ns.vcard('photo')
221
- * * ns.foaf('depiction')
222
-
223
- */
224
- function imagesOf(x, kb) {
225
- return kb.each(x, ns.sioc('avatar')).concat(kb.each(x, ns.foaf('img'))).concat(kb.each(x, ns.vcard('logo'))).concat(kb.each(x, ns.vcard('hasPhoto'))).concat(kb.each(x, ns.vcard('photo'))).concat(kb.each(x, ns.foaf('depiction')));
226
- }
227
-
228
- /**
229
- * Best logo or avatar or photo etc to represent someone or some group etc
230
- */
231
- var iconForClass = exports.iconForClass = {
232
- // Potentially extendable by other apps, panes, etc
233
- // Relative URIs to the iconBase
234
- 'solid:AppProviderClass': 'noun_144.svg',
235
- // @@ classs name should not contain 'Class'
236
- 'solid:AppProvider': 'noun_15177.svg',
237
- // @@
238
- 'solid:Pod': 'noun_Cabinet_1434380.svg',
239
- 'vcard:Group': 'noun_339237.svg',
240
- 'vcard:Organization': 'noun_143899.svg',
241
- 'vcard:Individual': 'noun_15059.svg',
242
- 'schema:Person': 'noun_15059.svg',
243
- 'foaf:Person': 'noun_15059.svg',
244
- 'foaf:Agent': 'noun_98053.svg',
245
- 'acl:AuthenticatedAgent': 'noun_99101.svg',
246
- 'prov:SoftwareAgent': 'noun_Robot_849764.svg',
247
- // Bot
248
- 'vcard:AddressBook': 'noun_15695.svg',
249
- 'trip:Trip': 'noun_581629.svg',
250
- 'meeting:LongChat': 'noun_1689339.svg',
251
- 'meeting:Meeting': 'noun_66617.svg',
252
- 'meeting:Project': 'noun_1036577.svg',
253
- 'ui:Form': 'noun_122196.svg',
254
- 'rdfs:Class': 'class-rectangle.svg',
255
- // For RDF developers
256
- 'rdf:Property': 'property-diamond.svg',
257
- 'owl:Ontology': 'noun_classification_1479198.svg',
258
- 'wf:Tracker': 'noun_122196.svg',
259
- 'wf:Task': 'noun_17020_gray-tick.svg',
260
- 'wf:Open': 'noun_17020_sans-tick.svg',
261
- 'wf:Closed': 'noun_17020.svg'
262
- };
263
-
264
- /**
265
- * Returns the origin of the URI of a NamedNode
266
- */
267
- function tempSite(x) {
268
- // use only while one in rdflib fails with origins 2019
269
- var str = x.uri.split('#')[0];
270
- var p = str.indexOf('//');
271
- if (p < 0) throw new Error('This URI does not have a web site part (origin)');
272
- var q = str.indexOf('/', p + 2);
273
- if (q < 0) {
274
- // no third slash?
275
- return str.slice(0) + '/'; // Add slash to a bare origin
276
- } else {
277
- return str.slice(0, q + 1);
278
- }
279
- }
280
-
281
- /**
282
- * Find an image for this thing as a class
283
- */
284
- function findImageFromURI(x) {
285
- var iconDir = iconBase;
286
-
287
- // Special cases from URI scheme:
288
- if (typeof x !== 'string' && x.uri) {
289
- if (x.uri.split('/').length === 4 && !x.uri.split('/')[1] && !x.uri.split('/')[3]) {
290
- return iconDir + 'noun_15177.svg'; // App -- this is an origin
291
- }
292
- // Non-HTTP URI types imply types
293
- if (x.uri.startsWith('message:') || x.uri.startsWith('mid:')) {
294
- // message: is apple bug-- should be mid:
295
- return iconDir + 'noun_480183.svg'; // envelope noun_567486
296
- }
297
- if (x.uri.startsWith('mailto:')) {
298
- return iconDir + 'noun_567486.svg'; // mailbox - an email desitination
299
- }
300
- // For HTTP(s) documents, we could look at the MIME type if we know it.
301
- if (x.uri.startsWith('https:') && x.uri.indexOf('#') < 0) {
302
- return tempSite(x) + 'favicon.ico'; // was x.site().uri + ...
303
- // Todo: make the document icon a fallback for if the favicon does not exist
304
- // todo: pick up a possible favicon for the web page itself from a link
305
- // was: return iconDir + 'noun_681601.svg' // document - under solid assumptions
306
- }
307
- return null;
308
- }
309
- return iconDir + 'noun_10636_grey.svg'; // Grey Circle - some thing
310
- }
311
-
312
- /**
313
- * Find something we have as explicit image data for the thing
314
- * See also [[imagesOf]]
315
- * @param thing The thing for which we want to find an image
316
- * @returns The URL of a globe icon if thing equals `ns.foaf('Agent')`
317
- * or `ns.rdf('Resource')`. Otherwise, it goes looking for
318
- * triples in `store`,
319
- * `(subject: thing), (predicate: see list below) (object: image-url)`
320
- * to find any image linked from the thing with one of the following
321
- * predicates (in order):
322
- * * ns.sioc('avatar')
323
- * * ns.foaf('img')
324
- * * ns.vcard('logo')
325
- * * ns.vcard('hasPhoto')
326
- * * ns.vcard('photo')
327
- * * ns.foaf('depiction')
328
- */
329
- function findImage(thing) {
330
- var kb = _solidLogic.store;
331
- var iconDir = iconBase;
332
- if (thing.sameTerm(ns.foaf('Agent')) || thing.sameTerm(ns.rdf('Resource'))) {
333
- return iconDir + 'noun_98053.svg'; // Globe
334
- }
335
- var image = kb.any(thing, ns.sioc('avatar')) || kb.any(thing, ns.foaf('img')) || kb.any(thing, ns.vcard('logo')) || kb.any(thing, ns.vcard('hasPhoto')) || kb.any(thing, ns.vcard('photo')) || kb.any(thing, ns.foaf('depiction'));
336
- return image ? image.uri : null;
337
- }
338
-
339
- /**
340
- * Do the best you can with the data available
341
- *
342
- * @return {Boolean} Are we happy with this icon?
343
- * Sets src AND STYLE of the image.
344
- */
345
- function trySetImage(element, thing, iconForClassMap) {
346
- var kb = _solidLogic.store;
347
- var explitImage = findImage(thing);
348
- if (explitImage) {
349
- element.setAttribute('src', explitImage);
350
- return true;
351
- }
352
- // This is one of the classes we know about - the class itself?
353
- var typeIcon = iconForClassMap[thing.uri];
354
- if (typeIcon) {
355
- element.setAttribute('src', typeIcon);
356
- element.style = style.classIconStyle;
357
- // element.style.border = '0.1em solid green;'
358
- // element.style.backgroundColor = '#eeffee' // pale green
359
- return true;
360
- }
361
- var schemeIcon = findImageFromURI(thing);
362
- if (schemeIcon) {
363
- element.setAttribute('src', schemeIcon);
364
- return true; // happy with this -- don't look it up
365
- }
366
-
367
- // Do we have a generic icon for something in any class its in?
368
- var types = kb.findTypeURIs(thing);
369
- for (var typeURI in types) {
370
- if (iconForClassMap[typeURI]) {
371
- element.setAttribute('src', iconForClassMap[typeURI]);
372
- return false; // maybe we can do better
373
- }
374
- }
375
- element.setAttribute('src', iconBase + 'noun_10636_grey.svg'); // Grey Circle - some thing
376
- return false; // we can do better
377
- }
378
-
379
- /**
380
- * ToDo: Also add icons for *properties* like home, work, email, range, domain, comment,
381
- */
382
- function setImage(element, thing) {
383
- // 20191230a
384
- var kb = _solidLogic.store;
385
- var iconForClassMap = {};
386
- for (var k in iconForClass) {
387
- var pref = k.split(':')[0];
388
- var id = k.split(':')[1];
389
- var theClass = ns[pref](id);
390
- iconForClassMap[theClass.uri] = _rdflib.uri.join(iconForClass[k], iconBase);
391
- }
392
- var happy = trySetImage(element, thing, iconForClassMap);
393
- if (!happy && thing.uri) {
394
- if (!kb.fetcher) {
395
- throw new Error('kb has no fetcher');
396
- }
397
- kb.fetcher.nowOrWhenFetched(thing.doc(), undefined, function (ok) {
398
- if (ok) {
399
- trySetImage(element, thing, iconForClassMap);
400
- }
401
- });
402
- }
403
- }
404
-
405
- // If a web page, then a favicon, with a fallback to ???
406
- // See, e.g., http://stackoverflow.com/questions/980855/inputting-a-default-image
407
- function faviconOrDefault(dom, x) {
408
- var image = dom.createElement('img');
409
- image.style = style.iconStyle;
410
- var isOrigin = function isOrigin(x) {
411
- if (!x.uri) return false;
412
- var parts = x.uri.split('/');
413
- return parts.length === 3 || parts.length === 4 && parts[3] === '';
414
- };
415
- image.setAttribute('src', iconBase + (isOrigin(x) ? 'noun_15177.svg' : 'noun_681601.svg') // App symbol vs document
416
- );
417
- if (x.uri && x.uri.startsWith('https:') && x.uri.indexOf('#') < 0) {
418
- var res = dom.createElement('object'); // favico with a fallback of a default image if no favicon
419
- res.setAttribute('data', tempSite(x) + 'favicon.ico');
420
- res.setAttribute('type', 'image/x-icon');
421
- res.appendChild(image); // fallback
422
- return res;
423
- } else {
424
- setImage(image, x);
425
- return image;
426
- }
427
- }
428
-
429
- /* Two-option dialog pop-up
430
- */
431
-
432
- function renderDeleteConfirmPopup(dom, refererenceElement, prompt, deleteFunction) {
433
- function removePopup() {
434
- refererenceElement.parentElement.removeChild(refererenceElement);
435
- }
436
- function removePopupAndDoDeletion() {
437
- removePopup();
438
- deleteFunction();
439
- }
440
- var popup = dom.createElement('div');
441
- popup.style = style.confirmPopupStyle;
442
- popup.style.position = 'absolute';
443
- popup.style.top = '-1em'; // try leaving original button clear
444
-
445
- popup.style.display = 'grid';
446
- popup.style.gridTemplateColumns = 'auto auto';
447
- var affirm = dom.createElement('div');
448
- affirm.style.gridColumn = '1/2';
449
- affirm.style.gridRow = '1'; // @@ sigh; TS. could pass number in fact
450
- var cancel = dom.createElement('div');
451
- cancel.style.gridColumn = '1/2';
452
- cancel.style.gridRow = '2';
453
- var xButton = cancelButton(dom, removePopup);
454
- popup.appendChild(xButton);
455
- xButton.style.gridColumn = '1';
456
- xButton.style.gridRow = '2';
457
- var cancelPrompt = popup.appendChild(dom.createElement('button'));
458
- cancelPrompt.style = style.buttonStyle;
459
- cancelPrompt.style.gridRow = '2';
460
- cancelPrompt.style.gridColumn = '2';
461
- cancelPrompt.textContent = 'Cancel'; // @@ I18n
462
-
463
- var affirmIcon = button(dom, _iconBase.icons.iconBase + 'noun_925021.svg', 'Delete it'); // trashcan
464
- popup.appendChild(affirmIcon);
465
- affirmIcon.style.gridRow = '1';
466
- affirmIcon.style.gridColumn = '1';
467
- var sureButtonElt = popup.appendChild(dom.createElement('button'));
468
- sureButtonElt.style = style.buttonStyle;
469
- sureButtonElt.style.gridRow = '1';
470
- sureButtonElt.style.gridColumn = '2';
471
- sureButtonElt.textContent = prompt;
472
- popup.appendChild(sureButtonElt);
473
- affirmIcon.addEventListener('click', removePopupAndDoDeletion);
474
- sureButtonElt.addEventListener('click', removePopupAndDoDeletion);
475
-
476
- // xButton.addEventListener('click', removePopup)
477
- cancelPrompt.addEventListener('click', removePopup);
478
- return popup;
479
- }
480
- /**
481
- * Delete button with a check you really mean it
482
- * @@ Supress check if command key held down?
483
- */
484
- function deleteButtonWithCheck(dom, container, noun, deleteFunction) {
485
- function createPopup() {
486
- var refererenceElement = dom.createElement('div');
487
- container.insertBefore(refererenceElement, deleteButton);
488
- refererenceElement.style.position = 'relative'; // Needed as reference for popup
489
- refererenceElement.appendChild(renderDeleteConfirmPopup(dom, refererenceElement, prompt, deleteFunction));
490
- }
491
- var minusIconURI = iconBase + 'noun_2188_red.svg'; // white minus in red #cc0000 circle
492
- var deleteButton = dom.createElement('img');
493
- deleteButton.setAttribute('src', minusIconURI);
494
- deleteButton.setAttribute('style', style.smallButtonStyle); // @@tsc - would set deleteButton.style
495
- deleteButton.style["float"] = 'right'; // Historically this has alwaus floated right
496
-
497
- var prompt = 'Remove this ' + noun;
498
- deleteButton.title = prompt;
499
- // @@ In an ideal world, make use of hover an accessibility option
500
- deleteButton.classList.add('hoverControlHide');
501
- deleteButton.addEventListener('click', createPopup);
502
- container.classList.add('hoverControl');
503
- container.appendChild(deleteButton);
504
- deleteButton.setAttribute('data-testid', 'deleteButtonWithCheck');
505
- return deleteButton; // or button div? caller may change size of image
506
- }
507
-
508
- /* Make a button
509
- *
510
- * @param dom - the DOM document object
511
- * @Param iconURI - the URI of the icon to use (if any)
512
- * @param text - the tooltip text or possibly button contents text
513
- * @param handler <function> - A handler to called when button is clicked
514
- *
515
- * @returns <dDomElement> - the button
516
- */
517
- function button(dom, iconURI, text, handler) {
518
- var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {
519
- buttonColor: 'Primary',
520
- needsBorder: false
521
- };
522
- var button = dom.createElement('button');
523
- button.setAttribute('type', 'button');
524
- // button.innerHTML = text // later, user preferences may make text preferred for some
525
- if (iconURI) {
526
- var img = button.appendChild(dom.createElement('img'));
527
- img.setAttribute('src', iconURI);
528
- img.setAttribute('style', 'width: 2em; height: 2em;'); // trial and error. 2em disappears
529
- img.title = text;
530
- button.setAttribute('style', style.buttonStyle);
531
- } else {
532
- button.textContent = text.toLocaleUpperCase();
533
- button.onmouseover = function () {
534
- if (options.buttonColor === 'Secondary') {
535
- if (options.needsBorder) {
536
- button.setAttribute('style', style.secondaryButtonNoBorderHover);
537
- } else {
538
- button.setAttribute('style', style.secondaryButtonHover);
539
- }
540
- } else {
541
- if (options.needsBorder) {
542
- button.setAttribute('style', style.primaryButtonNoBorderHover);
543
- } else {
544
- button.setAttribute('style', style.primaryButtonHover);
545
- }
546
- }
547
- };
548
- button.onmouseout = function () {
549
- if (options.buttonColor === 'Secondary') {
550
- if (options.needsBorder) {
551
- button.setAttribute('style', style.secondaryButtonNoBorder);
552
- } else {
553
- button.setAttribute('style', style.secondaryButton);
554
- }
555
- } else {
556
- if (options.needsBorder) {
557
- button.setAttribute('style', style.primaryButtonNoBorder);
558
- } else {
559
- button.setAttribute('style', style.primaryButton);
560
- }
561
- }
562
- };
563
- if (options.buttonColor === 'Secondary') {
564
- if (options.needsBorder) {
565
- button.setAttribute('style', style.secondaryButtonNoBorder);
566
- } else {
567
- button.setAttribute('style', style.secondaryButton);
568
- }
569
- } else {
570
- if (options.needsBorder) {
571
- button.setAttribute('style', style.primaryButtonNoBorder);
572
- } else {
573
- button.setAttribute('style', style.primaryButton);
574
- }
575
- }
576
- }
577
- if (handler) {
578
- button.addEventListener('click', handler, false);
579
- }
580
- return button;
581
- }
582
-
583
- /* Make a cancel button
584
- *
585
- * @param dom - the DOM document object
586
- * @param handler <function> - A handler to called when button is clicked
587
- *
588
- * @returns <dDomElement> - the button
589
- */
590
- function cancelButton(dom, handler) {
591
- var b = button(dom, cancelIconURI, 'Cancel', handler);
592
- if (b.firstChild) {
593
- // sigh for tsc
594
- b.firstChild.style.opacity = '0.3'; // Black X is too harsh: current language is grey X
595
- }
596
- return b;
597
- }
598
-
599
- /* Make a continue button
600
- *
601
- * @param dom - the DOM document object
602
- * @param handler <function> - A handler to called when button is clicked
603
- *
604
- * @returns <dDomElement> - the button
605
- */
606
- function continueButton(dom, handler) {
607
- return button(dom, checkIconURI, 'Continue', handler);
608
- }
609
-
610
- /* Grab a name for a new thing
611
- *
612
- * Form to get the name of a new thing before we create it
613
- * @params theClass Misspelt to avoid clashing with the JavaScript keyword
614
- * @returns: a promise of (a name or null if cancelled)
615
- */
616
- function askName(dom, kb, container, predicate, theClass, noun) {
617
- return new Promise(function (resolve, _reject) {
618
- var form = dom.createElement('div'); // form is broken as HTML behaviour can resurface on js error
619
- // classLabel = utils.label(ns.vcard('Individual'))
620
- predicate = predicate || ns.foaf('name'); // eg 'name' in user's language
621
- noun = noun || (theClass ? utils.label(theClass) : ' '); // eg 'folder' in users's language
622
- var prompt = noun + ' ' + utils.label(predicate) + ': ';
623
- form.appendChild(dom.createElement('p')).textContent = prompt;
624
- var namefield = dom.createElement('input');
625
- namefield.setAttribute('type', 'text');
626
- namefield.setAttribute('size', '100');
627
- namefield.setAttribute('maxLength', '2048'); // No arbitrary limits
628
- namefield.setAttribute('style', style.textInputStyle);
629
- namefield.select(); // focus next user input
630
- form.appendChild(namefield);
631
- container.appendChild(form);
632
-
633
- // namefield.focus()
634
-
635
- function gotName() {
636
- form.parentNode.removeChild(form);
637
- resolve(namefield.value.trim());
638
- }
639
- namefield.addEventListener('keyup', function (e) {
640
- if (e.keyCode === 13) {
641
- gotName();
642
- }
643
- }, false);
644
- form.appendChild(dom.createElement('br'));
645
- form.appendChild(cancelButton(dom, function (_event) {
646
- form.parentNode.removeChild(form);
647
- resolve(null);
648
- }));
649
- form.appendChild(continueButton(dom, function (_event) {
650
- gotName();
651
- }));
652
- namefield.focus();
653
- }); // Promise
654
- }
655
-
656
- /**
657
- * A TR to represent a draggable person, etc in a list
658
- *
659
- * pred is unused param at the moment
660
- */
661
- var personTR = exports.personTR = renderAsRow; // The legacy name is used in a lot of places
662
-
663
- function renderAsRow(dom, pred, obj, options) {
664
- var tr = dom.createElement('tr');
665
- options = options || {};
666
- // tr.predObj = [pred.uri, obj.uri] moved to acl-control
667
- var td1 = tr.appendChild(dom.createElement('td'));
668
- var td2 = tr.appendChild(dom.createElement('td'));
669
- var td3 = tr.appendChild(dom.createElement('td'));
670
-
671
- // const image = td1.appendChild(dom.createElement('img'))
672
- var image = options.image || faviconOrDefault(dom, obj);
673
- td1.setAttribute('style', 'vertical-align: middle; width:2.5em; padding:0.5em; height: 2.5em;');
674
- td2.setAttribute('style', 'vertical-align: middle; text-align:left;');
675
- td3.setAttribute('style', 'vertical-align: middle; width:2em; padding:0.5em; height: 4em;');
676
- td1.appendChild(image);
677
- if (options.title) {
678
- td2.textContent = options.title;
679
- } else {
680
- setName(td2, obj); // This is async
681
- }
682
- if (options.deleteFunction) {
683
- deleteButtonWithCheck(dom, td3, options.noun || 'one', options.deleteFunction);
684
- }
685
- if (obj.uri) {
686
- // blank nodes need not apply
687
- if (options.link !== false) {
688
- var anchor = td3.appendChild((0, _iconLinks.linkIcon)(dom, obj));
689
- anchor.classList.add('HoverControlHide');
690
- td3.appendChild(dom.createElement('br'));
691
- }
692
- if (options.draggable !== false) {
693
- // default is on
694
- image.setAttribute('draggable', 'false'); // Stop the image being dragged instead - just the TR
695
- (0, _dragAndDrop.makeDraggable)(tr, obj);
696
- }
697
- }
698
- ;
699
- tr.subject = obj;
700
- return tr;
701
- }
702
-
703
- /* A helper function for renderAsDiv
704
- * creates the NameDiv for the person
705
- * Note: could not move it to the helper file because they call exported functions
706
- * from buttons
707
- * @internal exporting this only for unit tests
708
- */
709
- function createNameDiv(dom, div, title, obj) {
710
- var nameDiv = div.appendChild(dom.createElement('div'));
711
- if (title) {
712
- nameDiv.textContent = title;
713
- } else {
714
- setName(nameDiv, obj); // This is async
715
- }
716
- }
717
- /* A helper function for renderAsDiv
718
- * creates the linkDiv for the person
719
- * Note: could not move it to the helper file because they call exported functions
720
- * from buttons
721
- * @internal exporting this only for unit tests
722
- */
723
- function createLinkDiv(dom, div, obj, options) {
724
- var linkDiv = div.appendChild(dom.createElement('div'));
725
- linkDiv.setAttribute('style', style.linkDivStyle);
726
- if (options.deleteFunction) {
727
- deleteButtonWithCheck(dom, linkDiv, options.noun || 'one', options.deleteFunction);
728
- }
729
- if (obj.uri) {
730
- // blank nodes need not apply
731
- if (options.link !== false) {
732
- (0, _iconLinks.createLinkForURI)(dom, linkDiv, obj);
733
- }
734
- (0, _dragAndDrop.makeDraggable)(div, obj);
735
- }
736
- }
737
- /**
738
- * A Div to represent a draggable person, etc in a list
739
- * configurable to add an onClick listener
740
- */
741
- function renderAsDiv(dom, obj, options) {
742
- var div = dom.createElement('div');
743
- div.setAttribute('style', style.renderAsDivStyle);
744
- options = options || {};
745
- var image = options.image || faviconOrDefault(dom, obj);
746
- (0, _widgetHelpers.createImageDiv)(dom, div, image);
747
- createNameDiv(dom, div, options.title, obj);
748
- createLinkDiv(dom, div, obj, options);
749
- if (options.clickable && options.onClickFunction) {
750
- (0, _widgetHelpers.addClickListenerToElement)(div, options.onClickFunction);
751
- }
752
-
753
- // to be compatible with the SolidOS table layout
754
- if (options.wrapInATR) {
755
- var tr = (0, _widgetHelpers.wrapDivInATR)(dom, div, obj);
756
- return tr;
757
- }
758
- return div;
759
- }
760
-
761
- /**
762
- * Refresh a DOM tree recursively
763
- */
764
- function refreshTree(root) {
765
- if (root.refresh) {
766
- root.refresh();
767
- return;
768
- }
769
- for (var i = 0; i < root.children.length; i++) {
770
- refreshTree(root.children[i]);
771
- }
772
- }
773
-
774
- /**
775
- * Options argument for [[attachmentList]] function
776
- */
777
-
778
- /**
779
- * Component that displays a list of resources, for instance
780
- * the attachments of a message, or the various documents related
781
- * to a meeting.
782
- * Accepts dropping URLs onto it to add attachments to it.
783
- */
784
- function attachmentList(dom, subject, div) {
785
- var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
786
- // options = options || {}
787
-
788
- var deleteAttachment = function deleteAttachment(target) {
789
- if (!kb.updater) {
790
- throw new Error('kb has no updater');
791
- }
792
- kb.updater.update((0, _rdflib.st)(subject, predicate, target, doc), [], function (uri, ok, errorBody, _xhr) {
793
- if (ok) {
794
- refresh();
795
- } else {
796
- complain(undefined, 'Error deleting one: ' + errorBody);
797
- }
798
- });
799
- };
800
- function createNewRow(target) {
801
- var theTarget = target;
802
- var opt = {
803
- noun: noun
804
- };
805
- if (modify) {
806
- opt.deleteFunction = function () {
807
- deleteAttachment(theTarget);
808
- };
809
- }
810
- return personTR(dom, predicate, target, opt);
811
- }
812
- var refresh = function refresh() {
813
- var things = kb.each(subject, predicate);
814
- things.sort();
815
- utils.syncTableToArray(attachmentTable, things, createNewRow);
816
- };
817
- function droppedURIHandler(uris) {
818
- var ins = [];
819
- uris.forEach(function (u) {
820
- var target = (0, _rdflib.sym)(u); // Attachment needs text label to disinguish I think not icon.
821
- debug.log('Dropped on attachemnt ' + u); // icon was: iconBase + 'noun_25830.svg'
822
- ins.push((0, _rdflib.st)(subject, predicate, target, doc));
823
- });
824
- if (!kb.updater) {
825
- throw new Error('kb has no updater');
826
- }
827
- kb.updater.update([], ins, function (uri, ok, errorBody, _xhr) {
828
- if (ok) {
829
- refresh();
830
- } else {
831
- complain(undefined, 'Error adding one: ' + errorBody);
832
- }
833
- });
834
- }
835
- function droppedFileHandler(files) {
836
- var _options$uploadFolder, _options$uploadFolder2;
837
- (0, _dragAndDrop.uploadFiles)(kb.fetcher, files, (_options$uploadFolder = options.uploadFolder) === null || _options$uploadFolder === void 0 ? void 0 : _options$uploadFolder.uri, // Files
838
- (_options$uploadFolder2 = options.uploadFolder) === null || _options$uploadFolder2 === void 0 ? void 0 : _options$uploadFolder2.uri,
839
- // Pictures
840
- function (theFile, destURI) {
841
- var ins = [(0, _rdflib.st)(subject, predicate, kb.sym(destURI), doc)];
842
- if (!kb.updater) {
843
- throw new Error('kb has no updater');
844
- }
845
- kb.updater.update([], ins, function (uri, ok, errorBody, _xhr) {
846
- if (ok) {
847
- refresh();
848
- } else {
849
- complain(undefined, 'Error adding link to uploaded file: ' + errorBody);
850
- }
851
- });
852
- });
853
- }
854
- var doc = options.doc || subject.doc();
855
- if (options.modify === undefined) options.modify = true;
856
- var modify = options.modify;
857
- var promptIcon = options.promptIcon || iconBase + 'noun_748003.svg'; // target
858
- // const promptIcon = options.promptIcon || (iconBase + 'noun_25830.svg') // paperclip
859
- var predicate = options.predicate || ns.wf('attachment');
860
- var noun = options.noun || 'attachment';
861
- var kb = _solidLogic.store;
862
- var attachmentOuter = div.appendChild(dom.createElement('table'));
863
- attachmentOuter.setAttribute('style', 'margin-top: 1em; margin-bottom: 1em;');
864
- var attachmentOne = attachmentOuter.appendChild(dom.createElement('tr'));
865
- var attachmentLeft = attachmentOne.appendChild(dom.createElement('td'));
866
- var attachmentRight = attachmentOne.appendChild(dom.createElement('td'));
867
- var attachmentTable = attachmentRight.appendChild(dom.createElement('table'));
868
- attachmentTable.appendChild(dom.createElement('tr')) // attachmentTableTop
869
- ;
870
- attachmentOuter.refresh = refresh; // Participate in downstream changes
871
- // ;(attachmentTable as any).refresh = refresh <- outer should be best?
872
-
873
- refresh();
874
- if (modify) {
875
- // const buttonStyle = 'width; 2em; height: 2em; margin: 0.5em; padding: 0.1em;'
876
- var paperclip = button(dom, promptIcon, 'Drop attachments here');
877
- // paperclip.style = buttonStyle // @@ needed? default has white background
878
- attachmentLeft.appendChild(paperclip);
879
- var fhandler = options.uploadFolder ? droppedFileHandler : null;
880
- (0, _dragAndDrop.makeDropTarget)(paperclip, droppedURIHandler, fhandler); // beware missing the wire of the paparclip!
881
- (0, _dragAndDrop.makeDropTarget)(attachmentLeft, droppedURIHandler, fhandler); // just the outer won't do it
882
-
883
- if (options.uploadFolder) {
884
- // Addd an explicit file upload button as well
885
- var buttonDiv = fileUploadButtonDiv(dom, droppedFileHandler);
886
- attachmentLeft.appendChild(buttonDiv);
887
- // buttonDiv.children[1].style = buttonStyle
888
- }
889
- }
890
- return attachmentOuter;
891
- }
892
-
893
- // /////////////////////////////////////////////////////////////////////////////
894
-
895
- /**
896
- * Event Handler for links within solid apps.
897
- *
898
- * Note that native links have constraints in Firefox, they
899
- * don't work with local files for instance (2011)
900
- */
901
- function openHrefInOutlineMode(e) {
902
- e.preventDefault();
903
- e.stopPropagation();
904
- var target = utils.getTarget(e);
905
- var uri = target.getAttribute('href');
906
- if (!uri) return debug.log('openHrefInOutlineMode: No href found!\n');
907
- var dom = window.document;
908
- if (dom.outlineManager) {
909
- // @@ TODO Remove the use of document as a global object
910
- // TODO fix dependency cycle to solid-panes by calling outlineManager
911
- ;
912
- dom.outlineManager.GotoSubject(_solidLogic.store.sym(uri), true, undefined, true, undefined);
913
- } else if (window && window.panes && window.panes.getOutliner) {
914
- // @@ TODO Remove the use of window as a global object
915
- ;
916
- window.panes.getOutliner().GotoSubject(_solidLogic.store.sym(uri), true, undefined, true, undefined);
917
- } else {
918
- debug.log('ERROR: Can\'t access outline manager in this config');
919
- }
920
- // dom.outlineManager.GotoSubject(store.sym(uri), true, undefined, true, undefined)
921
- }
922
-
923
- /**
924
- * Make a URI in the Tabulator.org annotation store out of the URI of the thing to be annotated.
925
- *
926
- * @@ Todo: make it a personal preference.
927
- */
928
- function defaultAnnotationStore(subject) {
929
- if (subject.uri === undefined) return undefined;
930
- var s = subject.uri;
931
- if (s.slice(0, 7) !== 'http://') return undefined;
932
- s = s.slice(7); // Remove
933
- var hash = s.indexOf('#');
934
- if (hash >= 0) s = s.slice(0, hash);
935
- // Strip trailing
936
- else {
937
- var slash = s.lastIndexOf('/');
938
- if (slash < 0) return undefined;
939
- s = s.slice(0, slash);
940
- }
941
- return _solidLogic.store.sym('http://tabulator.org/wiki/annnotation/' + s);
942
- }
943
-
944
- /**
945
- * Retrieve all RDF class URIs from solid-ui's RDF store
946
- * @returns an object `ret` such that `Object.keys(ret)` is
947
- * the list of all class URIs.
948
- */
949
- function allClassURIs() {
950
- var set = {};
951
- _solidLogic.store.statementsMatching(undefined, ns.rdf('type'), undefined).forEach(function (st) {
952
- if (st.object.value) set[st.object.value] = true;
953
- });
954
- _solidLogic.store.statementsMatching(undefined, ns.rdfs('subClassOf'), undefined).forEach(function (st) {
955
- if (st.object.value) set[st.object.value] = true;
956
- if (st.subject.value) set[st.subject.value] = true;
957
- });
958
- _solidLogic.store.each(undefined, ns.rdf('type'), ns.rdfs('Class')).forEach(function (c) {
959
- if (c.value) set[c.value] = true;
960
- });
961
- return set;
962
- }
963
-
964
- /**
965
- * Figuring which properties we know about
966
- *
967
- * When the user inputs an RDF property, like for a form field
968
- * or when specifying the relationship between two arbitrary things,
969
- * then er can prompt them with properties the session knows about
970
- *
971
- * TODO: Look again by catching this somewhere. (On the kb?)
972
- * TODO: move to diff module? Not really a button.
973
- * @param {Store} kb The quadstore to be searched.
974
- */
975
-
976
- function propertyTriage(kb) {
977
- var possibleProperties = {};
978
- // if (possibleProperties === undefined) possibleProperties = {}
979
- // const kb = store
980
- var dp = {};
981
- var op = {};
982
- var no = 0;
983
- var nd = 0;
984
- var nu = 0;
985
- var pi = kb.predicateIndex; // One entry for each pred
986
- for (var p in pi) {
987
- var object = pi[p][0].object;
988
- if (object.termType === 'Literal') {
989
- dp[p] = true;
990
- nd++;
991
- } else {
992
- op[p] = true;
993
- no++;
994
- }
995
- } // If nothing discovered, then could be either:
996
- var ps = kb.each(undefined, ns.rdf('type'), ns.rdf('Property'));
997
- for (var i = 0; i < ps.length; i++) {
998
- var _p = ps[i].toNT();
999
- if (!op[_p] && !dp[_p]) {
1000
- dp[_p] = true;
1001
- op[_p] = true;
1002
- nu++;
1003
- }
1004
- }
1005
- possibleProperties.op = op;
1006
- possibleProperties.dp = dp;
1007
- (0, _log.info)("propertyTriage: ".concat(no, " non-lit, ").concat(nd, " literal. ").concat(nu, " unknown."));
1008
- return possibleProperties;
1009
- }
1010
-
1011
- /**
1012
- * General purpose widgets
1013
- */
1014
-
1015
- /**
1016
- * A button for jumping
1017
- */
1018
- function linkButton(dom, object) {
1019
- var b = dom.createElement('button');
1020
- b.setAttribute('type', 'button');
1021
- b.textContent = 'Goto ' + utils.label(object);
1022
- b.addEventListener('click', function (_event) {
1023
- // b.parentNode.removeChild(b)
1024
- // TODO fix dependency cycle to solid-panes by calling outlineManager
1025
- ;
1026
- dom.outlineManager.GotoSubject(object, true, undefined, true, undefined);
1027
- }, true);
1028
- return b;
1029
- }
1030
-
1031
- /**
1032
- * A button to remove some other element from the page
1033
- */
1034
- function removeButton(dom, element) {
1035
- var b = dom.createElement('button');
1036
- b.setAttribute('type', 'button');
1037
- b.textContent = '✕'; // MULTIPLICATION X
1038
- b.addEventListener('click', function (_event) {
1039
- ;
1040
- element.parentNode.removeChild(element);
1041
- }, true);
1042
- return b;
1043
- }
1044
-
1045
- // Description text area
1046
- //
1047
- // Make a box to demand a description or display existing one
1048
- //
1049
- // @param dom - the document DOM for the user interface
1050
- // @param kb - the graph which is the knowledge base we are working with
1051
- // @param subject - a term, the subject of the statement(s) being edited.
1052
- // @param predicate - a term, the predicate of the statement(s) being edited
1053
- // @param store - The web document being edited
1054
- // @param callbackFunction - takes (boolean ok, string errorBody)
1055
-
1056
- // /////////////////////////////////////// Random I/O widgets /////////////
1057
-
1058
- // //// Column Header Buttons
1059
- //
1060
- // These are for selecting different modes, sources,styles, etc.
1061
- //
1062
- /*
1063
- buttons.headerButtons = function (dom, kb, name, words) {
1064
- const box = dom.createElement('table')
1065
- var i, word, s = '<tr>'
1066
- box.setAttribute('style', 'width: 90%; height: 1.5em')
1067
- for (i=0; i<words.length; i++) {
1068
- s += '<td><input type="radio" name="' + name + '" id="' + words[i] + '" value='
1069
- }
1070
- box.innerHTML = s + '</tr>'
1071
-
1072
- }
1073
- */
1074
- // ////////////////////////////////////////////////////////////
1075
- //
1076
- // selectorPanel
1077
- //
1078
- // A vertical panel for selecting connections to left or right.
1079
- //
1080
- // @param inverse means this is the object rather than the subject
1081
- //
1082
- function selectorPanel(dom, kb, type, predicate, inverse, possible, options, callbackFunction, linkCallback) {
1083
- return selectorPanelRefresh(dom.createElement('div'), dom, kb, type, predicate, inverse, possible, options, callbackFunction, linkCallback);
1084
- }
1085
- function selectorPanelRefresh(list, dom, kb, type, predicate, inverse, possible, options, callbackFunction, linkCallback) {
1086
- var style0 = 'border: 0.1em solid #ddd; border-bottom: none; width: 95%; height: 2em; padding: 0.5em;';
1087
- var selected = null;
1088
- list.innerHTML = '';
1089
- var refreshItem = function refreshItem(box, x) {
1090
- // Scope to hold item and x
1091
- var item;
1092
- // eslint-disable-next-line prefer-const
1093
- var image;
1094
- var setStyle = function setStyle() {
1095
- var already = inverse ? kb.each(undefined, predicate, x) : kb.each(x, predicate);
1096
- iconDiv.setAttribute('class', already.length === 0 ? 'hideTillHover' : ''); // See tabbedtab.css
1097
- image.setAttribute('src', options.connectIcon || iconBase + 'noun_25830.svg');
1098
- image.setAttribute('title', already.length ? already.length : 'attach');
1099
- };
1100
- var f = index.twoLine.widgetForClass(type);
1101
- // eslint-disable-next-line prefer-const
1102
- item = f(dom, x);
1103
- item.setAttribute('style', style0);
1104
- var nav = dom.createElement('div');
1105
- nav.setAttribute('class', 'hideTillHover'); // See tabbedtab.css
1106
- nav.setAttribute('style', 'float:right; width:10%');
1107
- var a = dom.createElement('a');
1108
- a.setAttribute('href', x.uri);
1109
- a.setAttribute('style', 'float:right');
1110
- nav.appendChild(a).textContent = '>';
1111
- box.appendChild(nav);
1112
- var iconDiv = dom.createElement('div');
1113
- iconDiv.setAttribute('style', (inverse ? 'float:left;' : 'float:right;') + ' width:30px;');
1114
- image = dom.createElement('img');
1115
- setStyle();
1116
- iconDiv.appendChild(image);
1117
- box.appendChild(iconDiv);
1118
- item.addEventListener('click', function (event) {
1119
- if (selected === item) {
1120
- // deselect
1121
- item.setAttribute('style', style0);
1122
- selected = null;
1123
- } else {
1124
- if (selected) selected.setAttribute('style', style0);
1125
- item.setAttribute('style', style0 + 'background-color: #ccc; color:black;');
1126
- selected = item;
1127
- }
1128
- callbackFunction(x, event, selected === item);
1129
- setStyle();
1130
- }, false);
1131
- image.addEventListener('click', function (event) {
1132
- linkCallback(x, event, inverse, setStyle);
1133
- }, false);
1134
- box.appendChild(item);
1135
- return box;
1136
- };
1137
- for (var i = 0; i < possible.length; i++) {
1138
- var box = dom.createElement('div');
1139
- list.appendChild(box);
1140
- refreshItem(box, possible[i]);
1141
- }
1142
- return list;
1143
- }
1144
-
1145
- // ###########################################################################
1146
- //
1147
- // Small compact views of things
1148
- //
1149
- var index = exports.index = {};
1150
- // ///////////////////////////////////////////////////////////////////////////
1151
- // We need these for anything which is a subject of an attachment.
1152
- //
1153
- // These should be moved to type-dependeent UI code. Related panes maybe
1154
-
1155
- function twoLineDefault(dom, x) {
1156
- // Default
1157
- var box = dom.createElement('div');
1158
- box.textContent = utils.label(x);
1159
- return box;
1160
- }
1161
-
1162
- /**
1163
- * Find a function that can create a widget for a given class
1164
- * @param c The RDF class for which we want a widget generator function
1165
- */
1166
- function twoLineWidgetForClass(c) {
1167
- var widget = index.twoLine[c.uri];
1168
- var kb = _solidLogic.store;
1169
- if (widget) return widget;
1170
- var sup = kb.findSuperClassesNT(c);
1171
- for (var cl in sup) {
1172
- widget = index.twoLine[kb.fromNT(cl).uri];
1173
- if (widget) return widget;
1174
- }
1175
- return index.twoLine[''];
1176
- }
1177
-
1178
- /**
1179
- * Display a transaction
1180
- * @param x Should have attributes through triples in store:
1181
- * * ns.qu('payee') -> a named node
1182
- * * ns.qu('date) -> a literal
1183
- * * ns.qu('amount') -> a literal
1184
- */
1185
- function twoLineTransaction(dom, x) {
1186
- var failed = '';
1187
- var enc = function enc(p) {
1188
- var y = _solidLogic.store.any(x, ns.qu(p));
1189
- if (!y) failed += '@@ No value for ' + p + '! ';
1190
- return y ? utils.escapeForXML(y.value) : '?'; // @@@@
1191
- };
1192
- var box = dom.createElement('table');
1193
- box.innerHTML = "\n <tr>\n <td colspan=\"2\"> ".concat(enc('payee'), "</td>\n < /tr>\n < tr >\n <td>").concat(enc('date').slice(0, 10), "</td>\n <td style = \"text-align: right;\">").concat(enc('amount'), "</td>\n </tr>");
1194
- if (failed) {
1195
- box.innerHTML = "\n <tr>\n <td><a href=\"".concat(utils.escapeForXML(x.uri), "\">").concat(utils.escapeForXML(failed), "</a></td>\n </tr>");
1196
- }
1197
- return box;
1198
- }
1199
-
1200
- /**
1201
- * Display a trip
1202
- * @param x Should have attributes through triples in store:
1203
- * * ns.dc('title') -> a literal
1204
- * * ns.cal('dtstart') -> a literal
1205
- * * ns.cal('dtend') -> a literal
1206
- */
1207
- function twoLineTrip(dom, x) {
1208
- var enc = function enc(p) {
1209
- var y = _solidLogic.store.any(x, p);
1210
- return y ? utils.escapeForXML(y.value) : '?';
1211
- };
1212
- var box = dom.createElement('table');
1213
- box.innerHTML = "\n <tr>\n <td colspan=\"2\">".concat(enc(ns.dc('title')), "</td>\n </tr>\n <tr style=\"color: #777\">\n <td>").concat(enc(ns.cal('dtstart')), "</td>\n <td>").concat(enc(ns.cal('dtend')), "</td>\n </tr>");
1214
- return box;
1215
- }
1216
-
1217
- /**
1218
- * Stick a stylesheet link the document if not already there
1219
- */
1220
- function addStyleSheet(dom, href) {
1221
- var links = dom.querySelectorAll('link');
1222
- for (var i = 0; i < links.length; i++) {
1223
- if ((links[i].getAttribute('rel') || '') === 'stylesheet' && (links[i].getAttribute('href') || '') === href) {
1224
- return;
1225
- }
1226
- }
1227
- var link = dom.createElement('link');
1228
- link.setAttribute('rel', 'stylesheet');
1229
- link.setAttribute('type', 'text/css');
1230
- link.setAttribute('href', href);
1231
- dom.getElementsByTagName('head')[0].appendChild(link);
1232
- }
1233
-
1234
- // Figure (or guess) whether this is an image, etc
1235
- //
1236
- function isAudio(file) {
1237
- return isImage(file, 'audio');
1238
- }
1239
- function isVideo(file) {
1240
- return isImage(file, 'video');
1241
- }
1242
- /**
1243
- *
1244
- */
1245
- function isImage(file, kind) {
1246
- var dcCLasses = {
1247
- audio: 'http://purl.org/dc/dcmitype/Sound',
1248
- image: 'http://purl.org/dc/dcmitype/Image',
1249
- video: 'http://purl.org/dc/dcmitype/MovingImage'
1250
- };
1251
- var what = kind || 'image';
1252
- // See https://github.com/linkeddata/rdflib.js/blob/e367d5088c/src/formula.ts#L554
1253
- //
1254
- var typeURIs = _solidLogic.store.findTypeURIs(file);
1255
- // See https://github.com/linkeddata/rdflib.js/blob/d5000f/src/utils-js.js#L14
1256
- // e.g.'http://www.w3.org/ns/iana/media-types/audio'
1257
- var prefix = _rdflib.Util.mediaTypeClass(what + '/*').uri.split('*')[0];
1258
- for (var t in typeURIs) {
1259
- if (t.startsWith(prefix)) return true;
1260
- }
1261
- if (dcCLasses[what] in typeURIs) return true;
1262
- return false;
1263
- }
1264
-
1265
- /**
1266
- * File upload button
1267
- * @param dom The DOM aka document
1268
- * @param droppedFileHandler Same handler function as drop, takes array of file objects
1269
- * @returns {Element} - a div with a button and a inout in it
1270
- * The input is hidden, as it is uglky - the user clicks on the nice icons and fires the input.
1271
- */
1272
- // See https://developer.mozilla.org/en-US/docs/Web/API/File/Using_files_from_web_applications
1273
- function fileUploadButtonDiv(dom, droppedFileHandler) {
1274
- var div = dom.createElement('div');
1275
- var input = div.appendChild(dom.createElement('input'));
1276
- input.setAttribute('type', 'file');
1277
- input.setAttribute('multiple', 'true');
1278
- input.addEventListener('change', function (event) {
1279
- debug.log('File drop event: ', event);
1280
- if (event.files) {
1281
- droppedFileHandler(event.files);
1282
- } else if (event.target && event.target.files) {
1283
- droppedFileHandler(event.target.files);
1284
- } else {
1285
- alert('Sorry no files .. internal error?');
1286
- }
1287
- }, false);
1288
- input.style = 'display:none';
1289
- var buttonElt = div.appendChild(button(dom, iconBase + 'noun_Upload_76574_000000.svg', 'Upload files', function (_event) {
1290
- input.click();
1291
- }));
1292
- (0, _dragAndDrop.makeDropTarget)(buttonElt, null, droppedFileHandler); // Can also just drop on button
1293
- return div;
1294
- }
1295
- exports.index = index = {
1296
- line: {// Approx 80em
1297
- },
1298
- twoLine: {
1299
- // Approx 40em * 2.4em
1300
- '': twoLineDefault,
1301
- 'http://www.w3.org/2000/10/swap/pim/qif#Transaction': twoLineTransaction,
1302
- 'http://www.w3.org/ns/pim/trip#Trip': twoLineTrip,
1303
- widgetForClass: twoLineWidgetForClass
1304
- }
1305
- };
1306
- //# sourceMappingURL=buttons.js.map