solid-panes 3.5.27 → 3.5.28-59efa615

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 (309) hide show
  1. package/.babelrc +0 -0
  2. package/.eslintignore +0 -0
  3. package/.eslintrc +0 -0
  4. package/.github/workflows/ci.yml +0 -0
  5. package/.nvmrc +0 -0
  6. package/Documentation/VisualLanguage.html +0 -0
  7. package/Documentation/conventions.md +0 -0
  8. package/LICENSE.md +0 -0
  9. package/README.md +0 -2
  10. package/dev/index.html +0 -0
  11. package/dev/loader.ts +0 -0
  12. package/dev/pane/index.ts +0 -0
  13. package/doc/images/panes-for-classes.epgz +0 -0
  14. package/doc/images/panes-for-classes.svg +0 -0
  15. package/jest.config.js +0 -0
  16. package/jest.setup.ts +0 -0
  17. package/lib/RDFXMLPane.js +15 -9
  18. package/lib/RDFXMLPane.js.map +1 -1
  19. package/lib/argument/argumentPane.js +12 -11
  20. package/lib/argument/argumentPane.js.map +1 -1
  21. package/lib/attach/attachPane.js +58 -90
  22. package/lib/attach/attachPane.js.map +1 -1
  23. package/lib/audio/audioPane.js +19 -37
  24. package/lib/audio/audioPane.js.map +1 -1
  25. package/lib/classInstancePane.js +21 -22
  26. package/lib/classInstancePane.js.map +1 -1
  27. package/lib/dashboard/basicPreferences.d.ts +0 -0
  28. package/lib/dashboard/basicPreferences.d.ts.map +0 -0
  29. package/lib/dashboard/basicPreferences.js +96 -154
  30. package/lib/dashboard/basicPreferences.js.map +1 -1
  31. package/lib/dashboard/dashboardPane.d.ts +0 -0
  32. package/lib/dashboard/dashboardPane.d.ts.map +0 -0
  33. package/lib/dashboard/dashboardPane.js +2 -18
  34. package/lib/dashboard/dashboardPane.js.map +1 -1
  35. package/lib/dashboard/homepage.d.ts +0 -0
  36. package/lib/dashboard/homepage.d.ts.map +0 -0
  37. package/lib/dashboard/homepage.js +27 -49
  38. package/lib/dashboard/homepage.js.map +1 -1
  39. package/lib/dataContentPane.js +26 -61
  40. package/lib/dataContentPane.js.map +1 -1
  41. package/lib/defaultPane.js +23 -23
  42. package/lib/defaultPane.js.map +1 -1
  43. package/lib/dokieli/dokieliPane.js +29 -34
  44. package/lib/dokieli/dokieliPane.js.map +1 -1
  45. package/lib/dokieli/new.js +6 -1
  46. package/lib/dokieli/new.js.map +1 -1
  47. package/lib/form/pane.js +34 -45
  48. package/lib/form/pane.js.map +1 -1
  49. package/lib/global.d.js +0 -0
  50. package/lib/global.d.js.map +0 -0
  51. package/lib/home/homePane.d.ts +0 -0
  52. package/lib/home/homePane.d.ts.map +0 -0
  53. package/lib/home/homePane.js +49 -67
  54. package/lib/home/homePane.js.map +1 -1
  55. package/lib/humanReadablePane.js +14 -28
  56. package/lib/humanReadablePane.js.map +1 -1
  57. package/lib/imagePane.js +19 -14
  58. package/lib/imagePane.js.map +1 -1
  59. package/lib/index.d.ts +0 -0
  60. package/lib/index.d.ts.map +0 -0
  61. package/lib/index.js +6 -20
  62. package/lib/index.js.map +1 -1
  63. package/lib/internal/internalPane.d.ts +0 -0
  64. package/lib/internal/internalPane.d.ts.map +0 -0
  65. package/lib/internal/internalPane.js +10 -41
  66. package/lib/internal/internalPane.js.map +1 -1
  67. package/lib/mainPage/footer.d.ts +0 -0
  68. package/lib/mainPage/footer.d.ts.map +0 -0
  69. package/lib/mainPage/footer.js +0 -4
  70. package/lib/mainPage/footer.js.map +1 -1
  71. package/lib/mainPage/header.d.ts +0 -0
  72. package/lib/mainPage/header.d.ts.map +0 -0
  73. package/lib/mainPage/header.js +66 -100
  74. package/lib/mainPage/header.js.map +1 -1
  75. package/lib/mainPage/index.d.ts +0 -0
  76. package/lib/mainPage/index.d.ts.map +0 -0
  77. package/lib/mainPage/index.js +17 -30
  78. package/lib/mainPage/index.js.map +1 -1
  79. package/lib/microblogPane/microblogPane.js +182 -321
  80. package/lib/microblogPane/microblogPane.js.map +1 -1
  81. package/lib/n3Pane.js +12 -8
  82. package/lib/n3Pane.js.map +1 -1
  83. package/lib/outline/context.d.ts +0 -0
  84. package/lib/outline/context.d.ts.map +0 -0
  85. package/lib/outline/context.js +0 -2
  86. package/lib/outline/context.js.map +1 -1
  87. package/lib/outline/licenseOptions.js +21 -35
  88. package/lib/outline/licenseOptions.js.map +1 -1
  89. package/lib/outline/manager.js +740 -1176
  90. package/lib/outline/manager.js.map +1 -1
  91. package/lib/outline/manager.test.js +16 -25
  92. package/lib/outline/manager.test.js.map +1 -1
  93. package/lib/outline/outlineIcons.js +39 -26
  94. package/lib/outline/outlineIcons.js.map +1 -1
  95. package/lib/outline/propertyViews.d.ts +3 -2
  96. package/lib/outline/propertyViews.d.ts.map +1 -1
  97. package/lib/outline/propertyViews.js +7 -15
  98. package/lib/outline/propertyViews.js.map +1 -1
  99. package/lib/outline/propertyViews.test.js +7 -7
  100. package/lib/outline/propertyViews.test.js.map +1 -1
  101. package/lib/outline/queryByExample.js +28 -80
  102. package/lib/outline/queryByExample.js.map +1 -1
  103. package/lib/outline/userInput.js +221 -459
  104. package/lib/outline/userInput.js.map +1 -1
  105. package/lib/outline/viewAsImage.d.ts +0 -0
  106. package/lib/outline/viewAsImage.d.ts.map +0 -0
  107. package/lib/outline/viewAsImage.js +0 -6
  108. package/lib/outline/viewAsImage.js.map +1 -1
  109. package/lib/outline/viewAsMbox.d.ts +0 -0
  110. package/lib/outline/viewAsMbox.d.ts.map +0 -0
  111. package/lib/outline/viewAsMbox.js +3 -4
  112. package/lib/outline/viewAsMbox.js.map +1 -1
  113. package/lib/pad/padPane.d.ts +0 -0
  114. package/lib/pad/padPane.d.ts.map +0 -0
  115. package/lib/pad/padPane.js +45 -93
  116. package/lib/pad/padPane.js.map +1 -1
  117. package/lib/playlist/playlistPane.js +11 -21
  118. package/lib/playlist/playlistPane.js.map +1 -1
  119. package/lib/profile/editProfile.view.d.ts +0 -0
  120. package/lib/profile/editProfile.view.d.ts.map +1 -1
  121. package/lib/profile/editProfile.view.js +22 -23
  122. package/lib/profile/editProfile.view.js.map +1 -1
  123. package/lib/profile/profile.dom.d.ts +0 -0
  124. package/lib/profile/profile.dom.d.ts.map +0 -0
  125. package/lib/profile/profile.dom.js +0 -3
  126. package/lib/profile/profile.dom.js.map +1 -1
  127. package/lib/registerPanes.js +99 -54
  128. package/lib/registerPanes.js.map +1 -1
  129. package/lib/schedule/formsForSchedule.js +6 -1
  130. package/lib/schedule/formsForSchedule.js.map +1 -1
  131. package/lib/schedule/schedulePane.js +71 -126
  132. package/lib/schedule/schedulePane.js.map +1 -1
  133. package/lib/sharing/sharingPane.d.ts +0 -0
  134. package/lib/sharing/sharingPane.d.ts.map +0 -0
  135. package/lib/sharing/sharingPane.js +2 -10
  136. package/lib/sharing/sharingPane.js.map +1 -1
  137. package/lib/slideshow/slideshowPane.js +21 -21
  138. package/lib/slideshow/slideshowPane.js.map +1 -1
  139. package/lib/socialPane.js +58 -135
  140. package/lib/socialPane.js.map +1 -1
  141. package/lib/tabbed/tabbedPane.d.ts +0 -0
  142. package/lib/tabbed/tabbedPane.d.ts.map +0 -0
  143. package/lib/tabbed/tabbedPane.js +32 -48
  144. package/lib/tabbed/tabbedPane.js.map +1 -1
  145. package/lib/tableViewPane.js +15 -9
  146. package/lib/tableViewPane.js.map +1 -1
  147. package/lib/test-import-export/common.js +8 -3
  148. package/lib/test-import-export/common.js.map +1 -1
  149. package/lib/test-import-export/edit-importer.js +10 -14
  150. package/lib/test-import-export/edit-importer.js.map +1 -1
  151. package/lib/test-import-export/testImportExport.js +0 -0
  152. package/lib/test-import-export/testImportExport.js.map +0 -0
  153. package/lib/transaction/pane.js +38 -91
  154. package/lib/transaction/pane.js.map +1 -1
  155. package/lib/transaction/period.js +27 -71
  156. package/lib/transaction/period.js.map +1 -1
  157. package/lib/trip/tripPane.js +38 -35
  158. package/lib/trip/tripPane.js.map +1 -1
  159. package/lib/trustedApplications/trustedApplications.dom.d.ts +0 -0
  160. package/lib/trustedApplications/trustedApplications.dom.d.ts.map +0 -0
  161. package/lib/trustedApplications/trustedApplications.dom.js +12 -35
  162. package/lib/trustedApplications/trustedApplications.dom.js.map +1 -1
  163. package/lib/trustedApplications/trustedApplications.test.js +6 -8
  164. package/lib/trustedApplications/trustedApplications.test.js.map +1 -1
  165. package/lib/trustedApplications/trustedApplications.utils.d.ts +0 -0
  166. package/lib/trustedApplications/trustedApplications.utils.d.ts.map +0 -0
  167. package/lib/trustedApplications/trustedApplications.utils.js +1 -11
  168. package/lib/trustedApplications/trustedApplications.utils.js.map +1 -1
  169. package/lib/trustedApplications/trustedApplications.view.d.ts +0 -0
  170. package/lib/trustedApplications/trustedApplications.view.d.ts.map +0 -0
  171. package/lib/trustedApplications/trustedApplications.view.js +38 -61
  172. package/lib/trustedApplications/trustedApplications.view.js.map +1 -1
  173. package/lib/types.d.ts +0 -0
  174. package/lib/types.d.ts.map +0 -0
  175. package/lib/types.js +0 -0
  176. package/lib/types.js.map +0 -0
  177. package/lib/ui/pane.js +30 -29
  178. package/lib/ui/pane.js.map +1 -1
  179. package/lib/versionInfo.d.ts +0 -0
  180. package/lib/versionInfo.d.ts.map +0 -0
  181. package/lib/versionInfo.js +14 -14
  182. package/lib/versionInfo.js.map +1 -1
  183. package/lib/video/videoPane.js +11 -7
  184. package/lib/video/videoPane.js.map +1 -1
  185. package/package.json +26 -26
  186. package/src/RDFXMLPane.js +2 -2
  187. package/src/argument/argumentPane.js +1 -1
  188. package/src/argument/argument_icon_v04.jpg +0 -0
  189. package/src/argument/icon_argument.png +0 -0
  190. package/src/argument/transparentyingyang.png +0 -0
  191. package/src/attach/attachPane.js +3 -3
  192. package/src/attach/tbl-paperclip-128.png +0 -0
  193. package/src/attach/tbl-paperclip-22.png +0 -0
  194. package/src/attach/tbl-paperclip-22a.png +0 -0
  195. package/src/audio/audioPane.js +3 -3
  196. package/src/chatPreferencesForm.ttl +0 -0
  197. package/src/classInstancePane.js +3 -3
  198. package/src/dashboard/basicPreferences.ts +0 -0
  199. package/src/dashboard/dashboardPane.ts +0 -0
  200. package/src/dashboard/homepage.ts +0 -0
  201. package/src/dashboard/languages/codes.html +0 -0
  202. package/src/dashboard/languages/codes.xml +0 -0
  203. package/src/dashboard/languages/codes2.txt +0 -0
  204. package/src/dashboard/languages/foo +0 -0
  205. package/src/dashboard/languages/foo.ttl +0 -0
  206. package/src/dashboard/languages/get-language-names.sh +0 -0
  207. package/src/dashboard/ontologyData.ttl +0 -0
  208. package/src/dashboard/preferencesFormText.ttl +0 -0
  209. package/src/dataContentPane.js +3 -4
  210. package/src/defaultPane.js +3 -3
  211. package/src/dokieli/Makefile +0 -0
  212. package/src/dokieli/dokieliPane.js +5 -5
  213. package/src/dokieli/new.html +0 -0
  214. package/src/dokieli/new.js +1 -1
  215. package/src/form/form-22.png +0 -0
  216. package/src/form/form-b-22.png +0 -0
  217. package/src/form/form.graffle +0 -0
  218. package/src/form/form.png +0 -0
  219. package/src/form/pane.js +2 -2
  220. package/src/form/psuedocode-notes.txt +0 -0
  221. package/src/global.d.ts +0 -0
  222. package/src/home/homePane.ts +0 -0
  223. package/src/humanReadablePane.js +0 -0
  224. package/src/imagePane.js +2 -2
  225. package/src/index.ts +1 -1
  226. package/src/internal/internalPane.ts +0 -0
  227. package/src/mainPage/footer.ts +0 -0
  228. package/src/mainPage/header.ts +0 -0
  229. package/src/mainPage/index.ts +0 -0
  230. package/src/meeting/Makefile +0 -0
  231. package/src/meeting/test/meeting1/Actions/actions.ttl +0 -0
  232. package/src/meeting/test/meeting1/Actions/config.ttl +0 -0
  233. package/src/meeting/test/meeting1/Actions/state.ttl +0 -0
  234. package/src/meeting/test/meeting1/Schedule/details.ttl +0 -0
  235. package/src/meeting/test/meeting1/Schedule/details.ttl.acl +0 -0
  236. package/src/meeting/test/meeting1/Schedule/forms.ttl +0 -0
  237. package/src/meeting/test/meeting1/Schedule/forms.ttl.acl +0 -0
  238. package/src/meeting/test/meeting1/Schedule/index.html +0 -0
  239. package/src/meeting/test/meeting1/Schedule/index.html.acl +0 -0
  240. package/src/meeting/test/meeting1/Schedule/results.ttl +0 -0
  241. package/src/meeting/test/meeting1/Schedule/results.ttl.acl +0 -0
  242. package/src/meeting/test/meeting1/SharedNotes/pad.ttl +0 -0
  243. package/src/meeting/test/meeting1/chat/chat.ttl +0 -0
  244. package/src/meeting/test/meeting1/details.ttl +0 -0
  245. package/src/meeting/test/meeting1/pad/pad.ttl +0 -0
  246. package/src/microblogPane/mbStyle.css +0 -0
  247. package/src/microblogPane/microblogPane.js +1 -1
  248. package/src/n3Pane.js +2 -2
  249. package/src/outline/context.ts +0 -0
  250. package/src/outline/licenseOptions.js +9 -8
  251. package/src/outline/manager.js +18 -20
  252. package/src/outline/manager.test.ts +6 -0
  253. package/src/outline/outlineIcons.js +4 -2
  254. package/src/outline/propertyViews.test.ts +7 -1
  255. package/src/outline/propertyViews.ts +3 -3
  256. package/src/outline/queryByExample.js +3 -9
  257. package/src/outline/userInput.js +1 -1
  258. package/src/outline/viewAsImage.ts +0 -0
  259. package/src/outline/viewAsMbox.ts +0 -0
  260. package/src/pad/images/ColourOff.ai +0 -0
  261. package/src/pad/images/ColourOff.png +0 -0
  262. package/src/pad/images/ColourOn.ai +0 -0
  263. package/src/pad/images/ColourOn.png +0 -0
  264. package/src/pad/padPane.ts +0 -0
  265. package/src/playlist/playlistPane.js +3 -3
  266. package/src/profile/editProfile.view.ts +20 -0
  267. package/src/profile/profile.dom.ts +0 -0
  268. package/src/profile/profileFormText.ttl +0 -0
  269. package/src/registerPanes.js +92 -52
  270. package/src/schedule/Makefile +0 -0
  271. package/src/schedule/formsForSchedule.js +1 -1
  272. package/src/schedule/formsForSchedule.ttl +0 -0
  273. package/src/schedule/schedulePane.js +6 -2
  274. package/src/sharing/sharingPane.ts +0 -0
  275. package/src/slideshow/slideshowPane.js +3 -6
  276. package/src/socialPane.js +4 -5
  277. package/src/style/tabbedtab.css +0 -0
  278. package/src/tabbed/tabbedPane.ts +0 -0
  279. package/src/tableViewPane.js +3 -3
  280. package/src/test-import-export/common.js +1 -1
  281. package/src/test-import-export/edit-importer.js +5 -10
  282. package/src/test-import-export/testImportExport.js +0 -0
  283. package/src/transaction/068010-3d-transparent-glass-icon-alphanumeric-dollar-sign.png +0 -0
  284. package/src/transaction/075988-3d-transparent-glass-icon-business-currency-british-pound-sc35.png +0 -0
  285. package/src/transaction/22-pixel-068010-3d-transparent-glass-icon-alphanumeric-dollar-sign.png +0 -0
  286. package/src/transaction/pane.js +3 -3
  287. package/src/transaction/period.js +2 -2
  288. package/src/transaction/thumbs_075987-3d-transparent-glass-icon-business-creditcard2.png +0 -0
  289. package/src/transaction/thumbs_075989-3d-transparent-glass-icon-business-currency-cent-sc35.png +0 -0
  290. package/src/trip/tripPane.js +3 -3
  291. package/src/trustedApplications/__snapshots__/trustedApplications.test.ts.snap +0 -0
  292. package/src/trustedApplications/trustedApplications.dom.ts +0 -0
  293. package/src/trustedApplications/trustedApplications.test.ts +4 -0
  294. package/src/trustedApplications/trustedApplications.utils.ts +0 -0
  295. package/src/trustedApplications/trustedApplications.view.ts +0 -0
  296. package/src/types.ts +0 -0
  297. package/src/ui/22-builder.png +0 -0
  298. package/src/ui/builder.graffle +0 -0
  299. package/src/ui/builder.png +0 -0
  300. package/src/ui/builder2.png +0 -0
  301. package/src/ui/pane.js +3 -3
  302. package/src/versionInfo.ts +14 -14
  303. package/src/video/videoPane.js +3 -3
  304. package/timestamp.sh +0 -0
  305. package/travis/bumpversion.js +0 -0
  306. package/tsconfig.json +0 -0
  307. package/typings/raw-loader.d.ts +0 -0
  308. package/typings/solid-namespace/index.d.ts +0 -0
  309. package/webpack.config.js +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"padPane.js","names":["paneDef","icon","icons","iconBase","name","audience","ns","solid","label","subject","context","t","session","store","findTypeURIs","mintClass","pad","mintNew","newPaneOptions","updater","me","uri","Error","newInstance","sym","newBase","newPadDoc","doc","add","rdf","dc","Date","chunk","sioc","Promise","resolve","reject","put","statementsMatching","undefined","uri2","ok","message","render","paneOptions","dom","complainIfBad","div","appendChild","widgets","errorMessageBlock","clearElement","ele","firstChild","removeChild","genACLtext","docURI","aclURI","allWrite","g","graph","auth","Namespace","a","acl","foaf","serialize","setACL","callbackFunction","aclDoc","any","fetcher","aclText","webOperation","data","contentType","then","err","load","newInstanceButton","button","createElement","textContent","addEventListener","showBootstrap","spawnArea","thisInstance","container","noun","appDetails","login","newAppInstance","workspace","initializeNewInstanceInWorkspace","NamedNode","p","baseField","setAttribute","size","autocomplete","_e","value","slice","initializeNewInstanceAtBase","ws","space","split","log","error","appPathSegment","now","getTime","here","base","newIndexDoc","toBeCopied","local","agenda","f","length","item","fun","copyItem","push","newURI","console","setThatACL","shift","webCopy","authn","checkUser","webId","createNewPadDataFile","PAD","padDoc","_uri2","body","innerHTML","showResults","exists","currentUser","title","vcard","solo","window","document","options","padEle","notepad","naviMain","partipationTarget","meeting","manageParticipation","naviMiddle2","setRefreshHandler","reloadAndSync","loadPadData","nowOrWhenFetched","response","status","holds","wf","naviMiddle3","structure","naviLoginoutTR","naviTop","naviMiddle","naviMiddle1","naviStatus","statusArea","naviSpawn","naviMenu","timingArea"],"sources":["../../src/pad/padPane.ts"],"sourcesContent":["import { icons, ns, pad, widgets, login } from 'solid-ui'\nimport { authn, AppDetails } from 'solid-logic'\nimport { graph, log, NamedNode, Namespace, sym, serialize, Store } from 'rdflib'\nimport { PaneDefinition } from 'pane-registry'\n/* pad Pane\n **\n */\n\nconst paneDef: PaneDefinition = {\n // icon: (module.__dirname || __dirname) + 'images/ColourOn.png',\n icon: icons.iconBase + 'noun_79217.svg',\n\n name: 'pad',\n\n audience: [ns.solid('PowerUser')],\n\n // Does the subject deserve an pad pane?\n label: function (subject, context) {\n const t = (context.session.store as Store).findTypeURIs(subject)\n if (t['http://www.w3.org/ns/pim/pad#Notepad']) {\n return 'pad'\n }\n return null // No under other circumstances\n },\n\n mintClass: ns.pad('Notepad'),\n\n mintNew: function (context, newPaneOptions: any) {\n const store = context.session.store as Store\n const updater = store.updater\n if (newPaneOptions.me && !newPaneOptions.me.uri) {\n throw new Error('notepad mintNew: Invalid userid')\n }\n\n const newInstance = (newPaneOptions.newInstance =\n newPaneOptions.newInstance ||\n store.sym(newPaneOptions.newBase + 'index.ttl#this'))\n // const newInstance = kb.sym(newBase + 'pad.ttl#thisPad');\n const newPadDoc = newInstance.doc()\n\n store.add(newInstance, ns.rdf('type'), ns.pad('Notepad'), newPadDoc)\n store.add(newInstance, ns.dc('title'), 'Shared Notes', newPadDoc)\n store.add(newInstance, ns.dc('created'), new Date() as any, newPadDoc) // @@ TODO Remove casting\n if (newPaneOptions.me) {\n store.add(newInstance, ns.dc('author'), newPaneOptions.me, newPadDoc)\n }\n // kb.add(newInstance, ns.pad('next'), newInstance, newPadDoc);\n // linked list empty @@\n const chunk = store.sym(newInstance.uri + '_line0')\n store.add(newInstance, ns.pad('next'), chunk, newPadDoc) // Linked list has one entry\n store.add(chunk, ns.pad('next'), newInstance, newPadDoc)\n store.add(chunk, ns.dc('author'), newPaneOptions.me, newPadDoc)\n store.add(chunk, ns.sioc('content'), '', newPadDoc)\n\n return new Promise(function (resolve, reject) {\n if (!updater) {\n reject(new Error('Have no updater'))\n return\n }\n updater.put(\n newPadDoc,\n store.statementsMatching(undefined, undefined, undefined, newPadDoc),\n 'text/turtle',\n function (uri2, ok, message) {\n if (ok) {\n resolve(newPaneOptions)\n } else {\n reject(\n new Error('FAILED to save new tool at: ' + uri2 + ' : ' + message)\n )\n }\n }\n )\n })\n },\n // and follow instructions there\n // @@ TODO Set better type for paneOptions\n render: function (subject, context, paneOptions: any) {\n const dom = context.dom\n const store = context.session.store as Store\n // Utility functions\n const complainIfBad = function (ok: boolean, message: string) {\n if (!ok) {\n div.appendChild(widgets.errorMessageBlock(dom, message, 'pink'))\n }\n }\n\n const clearElement = function (ele: HTMLElement) {\n while (ele.firstChild) {\n ele.removeChild(ele.firstChild)\n }\n return ele\n }\n\n // Access control\n\n // Two constiations of ACL for this app, public read and public read/write\n // In all cases owner has read write control\n const genACLtext = function (\n docURI: string,\n aclURI: string,\n allWrite: boolean\n ) {\n const g = graph()\n const auth = Namespace('http://www.w3.org/ns/auth/acl#')\n let a = g.sym(aclURI + '#a1')\n const acl = g.sym(aclURI)\n const doc = g.sym(docURI)\n g.add(a, ns.rdf('type'), auth('Authorization'), acl)\n g.add(a, auth('accessTo'), doc, acl)\n g.add(a, auth('agent'), me, acl)\n g.add(a, auth('mode'), auth('Read'), acl)\n g.add(a, auth('mode'), auth('Write'), acl)\n g.add(a, auth('mode'), auth('Control'), acl)\n\n a = g.sym(aclURI + '#a2')\n g.add(a, ns.rdf('type'), auth('Authorization'), acl)\n g.add(a, auth('accessTo'), doc, acl)\n g.add(a, auth('agentClass'), ns.foaf('Agent'), acl)\n g.add(a, auth('mode'), auth('Read'), acl)\n if (allWrite) {\n g.add(a, auth('mode'), auth('Write'), acl)\n }\n // TODO: Figure out why `serialize` isn't on the type definition according to TypeScript:\n return serialize(acl, g, aclURI, 'text/turtle')\n }\n\n /**\n * @param docURI\n * @param allWrite\n * @param callbackFunction\n *\n * @returns {Promise<Response>}\n */\n const setACL = function setACL (\n docURI: string,\n allWrite: boolean,\n callbackFunction: Function\n ) {\n const aclDoc = store.any(\n sym(docURI),\n sym('http://www.iana.org/assignments/link-relations/acl')\n ) as NamedNode // @@ check that this get set by web.js\n if (!fetcher) {\n throw new Error('Have no fetcher')\n }\n if (aclDoc) {\n // Great we already know where it is\n const aclText = genACLtext(docURI, aclDoc.uri, allWrite)\n return fetcher\n .webOperation('PUT', aclDoc.uri, {\n data: aclText,\n contentType: 'text/turtle'\n })\n .then(() => callbackFunction(true))\n .catch(err => {\n callbackFunction(false, err.message)\n })\n } else {\n return fetcher\n .load(docURI)\n .catch((err: Error) => {\n callbackFunction(false, 'Getting headers for ACL: ' + err)\n })\n .then(() => {\n const aclDoc = store.any(\n sym(docURI),\n sym('http://www.iana.org/assignments/link-relations/acl')\n ) as NamedNode\n\n if (!aclDoc) {\n // complainIfBad(false, \"No Link rel=ACL header for \" + docURI);\n throw new Error('No Link rel=ACL header for ' + docURI)\n }\n\n const aclText = genACLtext(docURI, aclDoc.uri, allWrite)\n\n return fetcher.webOperation('PUT', aclDoc.uri, {\n data: aclText,\n contentType: 'text/turtle'\n })\n })\n .then(() => callbackFunction(true))\n .catch(err => {\n callbackFunction(false, err.message)\n })\n }\n }\n\n // Reproduction: spawn a new instance\n //\n // Viral growth path: user of app decides to make another instance\n const newInstanceButton = function () {\n const button = div.appendChild(dom.createElement('button'))\n button.textContent = 'Start another pad'\n button.addEventListener('click', function () {\n return showBootstrap(subject, spawnArea, 'pad')\n })\n return button\n }\n\n // Option of either using the workspace system or just typing in a URI\n const showBootstrap = function showBootstrap (\n thisInstance: any,\n container: HTMLElement,\n noun: string\n ) {\n const div = clearElement(container)\n const appDetails = { noun: 'notepad' } as AppDetails\n div.appendChild(\n login.newAppInstance(dom, appDetails, (workspace: string | null, newBase) => {\n // FIXME: not sure if this will work at all, just\n // trying to get the types to match - Michiel.\n return initializeNewInstanceInWorkspace(new NamedNode(workspace || newBase))\n })\n )\n\n div.appendChild(dom.createElement('hr')) // @@\n\n const p = div.appendChild(dom.createElement('p'))\n p.textContent =\n 'Where would you like to store the data for the ' +\n noun +\n '? ' +\n 'Give the URL of the directory where you would like the data stored.'\n const baseField = div.appendChild(dom.createElement('input'))\n baseField.setAttribute('type', 'text')\n baseField.size = 80 // really a string\n ;(baseField as any).label = 'base URL'\n baseField.autocomplete = 'on'\n\n div.appendChild(dom.createElement('br')) // @@\n\n const button = div.appendChild(dom.createElement('button'))\n button.textContent = 'Start new ' + noun + ' at this URI'\n button.addEventListener('click', function (_e) {\n let newBase = baseField.value\n if (newBase.slice(-1) !== '/') {\n newBase += '/'\n }\n initializeNewInstanceAtBase(thisInstance, newBase)\n })\n }\n\n // Create new document files for new instance of app\n const initializeNewInstanceInWorkspace = function (ws: NamedNode) {\n // @@ TODO Clean up type for newBase\n let newBase: any = store.any(ws, ns.space('uriPrefix'))\n if (!newBase) {\n newBase = ws.uri.split('#')[0]\n } else {\n newBase = newBase.value\n }\n if (newBase.slice(-1) !== '/') {\n log.error(appPathSegment + ': No / at end of uriPrefix ' + newBase) // @@ paramater?\n newBase = newBase + '/'\n }\n const now = new Date()\n newBase += appPathSegment + '/id' + now.getTime() + '/' // unique id\n\n initializeNewInstanceAtBase(thisInstance, newBase)\n }\n\n const initializeNewInstanceAtBase = function (\n thisInstance: any,\n newBase: string\n ) {\n const here = sym(thisInstance.uri.split('#')[0])\n const base = here // @@ ???\n\n const newPadDoc = store.sym(newBase + 'pad.ttl')\n const newIndexDoc = store.sym(newBase + 'index.html')\n\n const toBeCopied = [{ local: 'index.html', contentType: 'text/html' }]\n\n const newInstance = store.sym(newPadDoc.uri + '#thisPad')\n\n // log.debug(\"\\n Ready to put \" + kb.statementsMatching(undefined, undefined, undefined, there)); //@@\n\n const agenda: Function[] = []\n\n let f // @@ This needs some form of visible progress bar\n for (f = 0; f < toBeCopied.length; f++) {\n const item = toBeCopied[f]\n const fun = function copyItem (item: any) {\n agenda.push(function () {\n const newURI = newBase + item.local\n console.log('Copying ' + base + item.local + ' to ' + newURI)\n\n const setThatACL = function () {\n setACL(newURI, false, function (ok: boolean, message: string) {\n if (!ok) {\n complainIfBad(\n ok,\n 'FAILED to set ACL ' + newURI + ' : ' + message\n )\n console.log('FAILED to set ACL ' + newURI + ' : ' + message)\n } else {\n agenda.shift()!() // beware too much nesting\n }\n })\n }\n if (!store.fetcher) {\n throw new Error('Store has no fetcher')\n }\n store.fetcher\n .webCopy(\n base + item.local,\n newBase + item.local,\n item.contentType\n )\n .then(() => authn.checkUser())\n .then(webId => {\n me = webId\n\n setThatACL()\n })\n .catch(err => {\n console.log(\n 'FAILED to copy ' + base + item.local + ' : ' + err.message\n )\n complainIfBad(\n false,\n 'FAILED to copy ' + base + item.local + ' : ' + err.message\n )\n })\n })\n }\n fun(item)\n }\n\n agenda.push(function createNewPadDataFile () {\n store.add(newInstance, ns.rdf('type'), PAD('Notepad'), newPadDoc)\n\n // TODO @@ Remove casting of add\n store.add(\n newInstance,\n ns.dc('created'),\n new Date() as any, // @@ TODO Remove casting\n newPadDoc\n )\n if (me) {\n store.add(newInstance, ns.dc('author'), me, newPadDoc)\n }\n store.add(newInstance, PAD('next'), newInstance, newPadDoc) // linked list empty\n\n // Keep a paper trail @@ Revisit when we have non-public ones @@ Privacy\n store.add(newInstance, ns.space('inspiration'), thisInstance, padDoc)\n store.add(newInstance, ns.space('inspiration'), thisInstance, newPadDoc)\n if (!updater) {\n throw new Error('Have no updater')\n }\n updater.put(\n newPadDoc,\n store.statementsMatching(undefined, undefined, undefined, newPadDoc),\n 'text/turtle',\n function (_uri2, ok, message) {\n if (ok) {\n agenda.shift()!()\n } else {\n complainIfBad(\n ok,\n 'FAILED to save new notepad at: ' +\n newPadDoc.uri +\n ' : ' +\n message\n )\n console.log(\n 'FAILED to save new notepad at: ' +\n newPadDoc.uri +\n ' : ' +\n message\n )\n }\n }\n )\n })\n\n agenda.push(function () {\n setACL(newPadDoc.uri, true, function (ok: boolean, body: string) {\n complainIfBad(\n ok,\n 'Failed to set Read-Write ACL on pad data file: ' + body\n )\n if (ok) agenda.shift()!()\n })\n })\n\n agenda.push(function () {\n // give the user links to the new app\n\n const p = div.appendChild(dom.createElement('p'))\n p.setAttribute('style', 'font-size: 140%;')\n p.innerHTML =\n \"Your <a href='\" +\n newIndexDoc.uri +\n \"'><b>new notepad</b></a> is ready. \" +\n \"<br/><br/><a href='\" +\n newIndexDoc.uri +\n \"'>Go to new pad</a>\"\n })\n\n agenda.shift()!()\n // Created new data files.\n }\n\n // Update on incoming changes\n const showResults = function (exists: boolean) {\n console.log('showResults()')\n\n me = authn.currentUser()\n\n authn.checkUser().then((webId: unknown) => {\n me = webId as string\n })\n\n const title =\n store.any(subject, ns.dc('title')) || store.any(subject, ns.vcard('fn'))\n if (paneOptions.solo && typeof window !== 'undefined' && title) {\n window.document.title = title.value\n }\n options.exists = exists\n padEle = pad.notepad(dom, padDoc, subject, me, options)\n naviMain.appendChild(padEle)\n\n const partipationTarget =\n store.any(subject, ns.meeting('parentMeeting')) || subject\n pad.manageParticipation(\n dom,\n naviMiddle2,\n padDoc,\n partipationTarget as any,\n me,\n options\n )\n if (!store.updater) {\n throw new Error('Store has no updater')\n }\n\n store.updater.setRefreshHandler(padDoc, padEle.reloadAndSync) // initiated =\n }\n\n // Read or create empty data file\n const loadPadData = function () {\n if (!fetcher) {\n throw new Error('Have no fetcher')\n }\n fetcher.nowOrWhenFetched(padDoc.uri, undefined, function (\n ok: boolean,\n body: string,\n response: any\n ) {\n if (!ok) {\n if (response.status === 404) {\n // / Check explicitly for 404 error\n console.log('Initializing results file ' + padDoc)\n if (!updater) {\n throw new Error('Have no updater')\n }\n updater.put(padDoc, [], 'text/turtle', function (\n _uri2,\n ok,\n message\n ) {\n if (ok) {\n clearElement(naviMain)\n showResults(false)\n } else {\n complainIfBad(\n ok,\n 'FAILED to create results file at: ' +\n padDoc.uri +\n ' : ' +\n message\n )\n console.log(\n 'FAILED to craete results file at: ' +\n padDoc.uri +\n ' : ' +\n message\n )\n }\n })\n } else {\n // Other error, not 404 -- do not try to overwite the file\n complainIfBad(ok, 'FAILED to read results file: ' + body)\n }\n } else {\n // Happy read\n clearElement(naviMain)\n if (store.holds(subject, ns.rdf('type'), ns.wf('TemplateInstance'))) {\n showBootstrap(subject, naviMain, 'pad')\n }\n showResults(true)\n naviMiddle3.appendChild(newInstanceButton())\n }\n })\n }\n\n // Body of Pane\n const appPathSegment = 'app-pad.timbl.com' // how to allocate this string and connect to\n\n const fetcher = store.fetcher\n const updater = store.updater\n let me: any\n\n const PAD = Namespace('http://www.w3.org/ns/pim/pad#')\n\n const thisInstance = subject\n const padDoc = subject.doc()\n\n let padEle\n\n const div = dom.createElement('div')\n\n // Build the DOM\n const structure = div.appendChild(dom.createElement('table')) // @@ make responsive style\n structure.setAttribute(\n 'style',\n 'background-color: white; min-width: 94%; margin-right:3% margin-left: 3%; min-height: 13em;'\n )\n\n const naviLoginoutTR = structure.appendChild(dom.createElement('tr'))\n naviLoginoutTR.appendChild(dom.createElement('td')) // naviLoginout1\n naviLoginoutTR.appendChild(dom.createElement('td'))\n naviLoginoutTR.appendChild(dom.createElement('td'))\n\n const naviTop = structure.appendChild(dom.createElement('tr')) // stuff\n const naviMain = naviTop.appendChild(dom.createElement('td'))\n naviMain.setAttribute('colspan', '3')\n\n const naviMiddle = structure.appendChild(dom.createElement('tr')) // controls\n const naviMiddle1 = naviMiddle.appendChild(dom.createElement('td'))\n const naviMiddle2 = naviMiddle.appendChild(dom.createElement('td'))\n const naviMiddle3 = naviMiddle.appendChild(dom.createElement('td'))\n\n const naviStatus = structure.appendChild(dom.createElement('tr')) // status etc\n const statusArea = naviStatus.appendChild(dom.createElement('div'))\n\n const naviSpawn = structure.appendChild(dom.createElement('tr')) // create new\n const spawnArea = naviSpawn.appendChild(dom.createElement('div'))\n\n const naviMenu = structure.appendChild(dom.createElement('tr'))\n naviMenu.setAttribute('class', 'naviMenu')\n // naviMenu.setAttribute('style', 'margin-top: 3em;');\n naviMenu.appendChild(dom.createElement('td')) // naviLeft\n naviMenu.appendChild(dom.createElement('td'))\n naviMenu.appendChild(dom.createElement('td'))\n\n const options: any = { statusArea: statusArea, timingArea: naviMiddle1 }\n\n loadPadData()\n\n return div\n }\n}\n// ends\n\nexport default paneDef\n"],"mappings":"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"}
1
+ {"version":3,"file":"padPane.js","names":["paneDef","icon","icons","iconBase","name","audience","ns","solid","label","subject","context","t","session","store","findTypeURIs","mintClass","pad","mintNew","newPaneOptions","updater","me","uri","Error","newInstance","sym","newBase","newPadDoc","doc","add","rdf","dc","Date","chunk","sioc","Promise","resolve","reject","put","statementsMatching","undefined","uri2","ok","message","render","paneOptions","dom","complainIfBad","div","appendChild","widgets","errorMessageBlock","clearElement","ele","firstChild","removeChild","genACLtext","docURI","aclURI","allWrite","g","graph","auth","Namespace","a","acl","foaf","serialize","setACL","callbackFunction","aclDoc","any","fetcher","aclText","webOperation","data","contentType","then","err","load","newInstanceButton","button","createElement","textContent","addEventListener","showBootstrap","spawnArea","thisInstance","container","noun","appDetails","login","newAppInstance","workspace","initializeNewInstanceInWorkspace","NamedNode","p","baseField","setAttribute","size","autocomplete","_e","value","slice","initializeNewInstanceAtBase","ws","space","split","log","error","appPathSegment","now","getTime","here","base","newIndexDoc","toBeCopied","local","agenda","f","length","item","fun","copyItem","push","newURI","console","setThatACL","shift","webCopy","authn","checkUser","webId","createNewPadDataFile","PAD","padDoc","_uri2","body","innerHTML","showResults","exists","currentUser","title","vcard","solo","window","document","options","padEle","notepad","naviMain","partipationTarget","meeting","manageParticipation","naviMiddle2","setRefreshHandler","reloadAndSync","loadPadData","nowOrWhenFetched","response","status","holds","wf","naviMiddle3","structure","naviLoginoutTR","naviTop","naviMiddle","naviMiddle1","naviStatus","statusArea","naviSpawn","naviMenu","timingArea"],"sources":["../../src/pad/padPane.ts"],"sourcesContent":["import { icons, ns, pad, widgets, login } from 'solid-ui'\nimport { authn, AppDetails } from 'solid-logic'\nimport { graph, log, NamedNode, Namespace, sym, serialize, Store } from 'rdflib'\nimport { PaneDefinition } from 'pane-registry'\n/* pad Pane\n **\n */\n\nconst paneDef: PaneDefinition = {\n // icon: (module.__dirname || __dirname) + 'images/ColourOn.png',\n icon: icons.iconBase + 'noun_79217.svg',\n\n name: 'pad',\n\n audience: [ns.solid('PowerUser')],\n\n // Does the subject deserve an pad pane?\n label: function (subject, context) {\n const t = (context.session.store as Store).findTypeURIs(subject)\n if (t['http://www.w3.org/ns/pim/pad#Notepad']) {\n return 'pad'\n }\n return null // No under other circumstances\n },\n\n mintClass: ns.pad('Notepad'),\n\n mintNew: function (context, newPaneOptions: any) {\n const store = context.session.store as Store\n const updater = store.updater\n if (newPaneOptions.me && !newPaneOptions.me.uri) {\n throw new Error('notepad mintNew: Invalid userid')\n }\n\n const newInstance = (newPaneOptions.newInstance =\n newPaneOptions.newInstance ||\n store.sym(newPaneOptions.newBase + 'index.ttl#this'))\n // const newInstance = kb.sym(newBase + 'pad.ttl#thisPad');\n const newPadDoc = newInstance.doc()\n\n store.add(newInstance, ns.rdf('type'), ns.pad('Notepad'), newPadDoc)\n store.add(newInstance, ns.dc('title'), 'Shared Notes', newPadDoc)\n store.add(newInstance, ns.dc('created'), new Date() as any, newPadDoc) // @@ TODO Remove casting\n if (newPaneOptions.me) {\n store.add(newInstance, ns.dc('author'), newPaneOptions.me, newPadDoc)\n }\n // kb.add(newInstance, ns.pad('next'), newInstance, newPadDoc);\n // linked list empty @@\n const chunk = store.sym(newInstance.uri + '_line0')\n store.add(newInstance, ns.pad('next'), chunk, newPadDoc) // Linked list has one entry\n store.add(chunk, ns.pad('next'), newInstance, newPadDoc)\n store.add(chunk, ns.dc('author'), newPaneOptions.me, newPadDoc)\n store.add(chunk, ns.sioc('content'), '', newPadDoc)\n\n return new Promise(function (resolve, reject) {\n if (!updater) {\n reject(new Error('Have no updater'))\n return\n }\n updater.put(\n newPadDoc,\n store.statementsMatching(undefined, undefined, undefined, newPadDoc),\n 'text/turtle',\n function (uri2, ok, message) {\n if (ok) {\n resolve(newPaneOptions)\n } else {\n reject(\n new Error('FAILED to save new tool at: ' + uri2 + ' : ' + message)\n )\n }\n }\n )\n })\n },\n // and follow instructions there\n // @@ TODO Set better type for paneOptions\n render: function (subject, context, paneOptions: any) {\n const dom = context.dom\n const store = context.session.store as Store\n // Utility functions\n const complainIfBad = function (ok: boolean, message: string) {\n if (!ok) {\n div.appendChild(widgets.errorMessageBlock(dom, message, 'pink'))\n }\n }\n\n const clearElement = function (ele: HTMLElement) {\n while (ele.firstChild) {\n ele.removeChild(ele.firstChild)\n }\n return ele\n }\n\n // Access control\n\n // Two constiations of ACL for this app, public read and public read/write\n // In all cases owner has read write control\n const genACLtext = function (\n docURI: string,\n aclURI: string,\n allWrite: boolean\n ) {\n const g = graph()\n const auth = Namespace('http://www.w3.org/ns/auth/acl#')\n let a = g.sym(aclURI + '#a1')\n const acl = g.sym(aclURI)\n const doc = g.sym(docURI)\n g.add(a, ns.rdf('type'), auth('Authorization'), acl)\n g.add(a, auth('accessTo'), doc, acl)\n g.add(a, auth('agent'), me, acl)\n g.add(a, auth('mode'), auth('Read'), acl)\n g.add(a, auth('mode'), auth('Write'), acl)\n g.add(a, auth('mode'), auth('Control'), acl)\n\n a = g.sym(aclURI + '#a2')\n g.add(a, ns.rdf('type'), auth('Authorization'), acl)\n g.add(a, auth('accessTo'), doc, acl)\n g.add(a, auth('agentClass'), ns.foaf('Agent'), acl)\n g.add(a, auth('mode'), auth('Read'), acl)\n if (allWrite) {\n g.add(a, auth('mode'), auth('Write'), acl)\n }\n // TODO: Figure out why `serialize` isn't on the type definition according to TypeScript:\n return serialize(acl, g, aclURI, 'text/turtle')\n }\n\n /**\n * @param docURI\n * @param allWrite\n * @param callbackFunction\n *\n * @returns {Promise<Response>}\n */\n const setACL = function setACL (\n docURI: string,\n allWrite: boolean,\n callbackFunction: Function\n ) {\n const aclDoc = store.any(\n sym(docURI),\n sym('http://www.iana.org/assignments/link-relations/acl')\n ) as NamedNode // @@ check that this get set by web.js\n if (!fetcher) {\n throw new Error('Have no fetcher')\n }\n if (aclDoc) {\n // Great we already know where it is\n const aclText = genACLtext(docURI, aclDoc.uri, allWrite)\n return fetcher\n .webOperation('PUT', aclDoc.uri, {\n data: aclText,\n contentType: 'text/turtle'\n })\n .then(() => callbackFunction(true))\n .catch(err => {\n callbackFunction(false, err.message)\n })\n } else {\n return fetcher\n .load(docURI)\n .catch((err: Error) => {\n callbackFunction(false, 'Getting headers for ACL: ' + err)\n })\n .then(() => {\n const aclDoc = store.any(\n sym(docURI),\n sym('http://www.iana.org/assignments/link-relations/acl')\n ) as NamedNode\n\n if (!aclDoc) {\n // complainIfBad(false, \"No Link rel=ACL header for \" + docURI);\n throw new Error('No Link rel=ACL header for ' + docURI)\n }\n\n const aclText = genACLtext(docURI, aclDoc.uri, allWrite)\n\n return fetcher.webOperation('PUT', aclDoc.uri, {\n data: aclText,\n contentType: 'text/turtle'\n })\n })\n .then(() => callbackFunction(true))\n .catch(err => {\n callbackFunction(false, err.message)\n })\n }\n }\n\n // Reproduction: spawn a new instance\n //\n // Viral growth path: user of app decides to make another instance\n const newInstanceButton = function () {\n const button = div.appendChild(dom.createElement('button'))\n button.textContent = 'Start another pad'\n button.addEventListener('click', function () {\n return showBootstrap(subject, spawnArea, 'pad')\n })\n return button\n }\n\n // Option of either using the workspace system or just typing in a URI\n const showBootstrap = function showBootstrap (\n thisInstance: any,\n container: HTMLElement,\n noun: string\n ) {\n const div = clearElement(container)\n const appDetails = { noun: 'notepad' } as AppDetails\n div.appendChild(\n login.newAppInstance(dom, appDetails, (workspace: string | null, newBase) => {\n // FIXME: not sure if this will work at all, just\n // trying to get the types to match - Michiel.\n return initializeNewInstanceInWorkspace(new NamedNode(workspace || newBase))\n })\n )\n\n div.appendChild(dom.createElement('hr')) // @@\n\n const p = div.appendChild(dom.createElement('p'))\n p.textContent =\n 'Where would you like to store the data for the ' +\n noun +\n '? ' +\n 'Give the URL of the directory where you would like the data stored.'\n const baseField = div.appendChild(dom.createElement('input'))\n baseField.setAttribute('type', 'text')\n baseField.size = 80 // really a string\n ;(baseField as any).label = 'base URL'\n baseField.autocomplete = 'on'\n\n div.appendChild(dom.createElement('br')) // @@\n\n const button = div.appendChild(dom.createElement('button'))\n button.textContent = 'Start new ' + noun + ' at this URI'\n button.addEventListener('click', function (_e) {\n let newBase = baseField.value\n if (newBase.slice(-1) !== '/') {\n newBase += '/'\n }\n initializeNewInstanceAtBase(thisInstance, newBase)\n })\n }\n\n // Create new document files for new instance of app\n const initializeNewInstanceInWorkspace = function (ws: NamedNode) {\n // @@ TODO Clean up type for newBase\n let newBase: any = store.any(ws, ns.space('uriPrefix'))\n if (!newBase) {\n newBase = ws.uri.split('#')[0]\n } else {\n newBase = newBase.value\n }\n if (newBase.slice(-1) !== '/') {\n log.error(appPathSegment + ': No / at end of uriPrefix ' + newBase) // @@ paramater?\n newBase = newBase + '/'\n }\n const now = new Date()\n newBase += appPathSegment + '/id' + now.getTime() + '/' // unique id\n\n initializeNewInstanceAtBase(thisInstance, newBase)\n }\n\n const initializeNewInstanceAtBase = function (\n thisInstance: any,\n newBase: string\n ) {\n const here = sym(thisInstance.uri.split('#')[0])\n const base = here // @@ ???\n\n const newPadDoc = store.sym(newBase + 'pad.ttl')\n const newIndexDoc = store.sym(newBase + 'index.html')\n\n const toBeCopied = [{ local: 'index.html', contentType: 'text/html' }]\n\n const newInstance = store.sym(newPadDoc.uri + '#thisPad')\n\n // log.debug(\"\\n Ready to put \" + kb.statementsMatching(undefined, undefined, undefined, there)); //@@\n\n const agenda: Function[] = []\n\n let f // @@ This needs some form of visible progress bar\n for (f = 0; f < toBeCopied.length; f++) {\n const item = toBeCopied[f]\n const fun = function copyItem (item: any) {\n agenda.push(function () {\n const newURI = newBase + item.local\n console.log('Copying ' + base + item.local + ' to ' + newURI)\n\n const setThatACL = function () {\n setACL(newURI, false, function (ok: boolean, message: string) {\n if (!ok) {\n complainIfBad(\n ok,\n 'FAILED to set ACL ' + newURI + ' : ' + message\n )\n console.log('FAILED to set ACL ' + newURI + ' : ' + message)\n } else {\n agenda.shift()!() // beware too much nesting\n }\n })\n }\n if (!store.fetcher) {\n throw new Error('Store has no fetcher')\n }\n store.fetcher\n .webCopy(\n base + item.local,\n newBase + item.local,\n item.contentType\n )\n .then(() => authn.checkUser())\n .then(webId => {\n me = webId\n\n setThatACL()\n })\n .catch(err => {\n console.log(\n 'FAILED to copy ' + base + item.local + ' : ' + err.message\n )\n complainIfBad(\n false,\n 'FAILED to copy ' + base + item.local + ' : ' + err.message\n )\n })\n })\n }\n fun(item)\n }\n\n agenda.push(function createNewPadDataFile () {\n store.add(newInstance, ns.rdf('type'), PAD('Notepad'), newPadDoc)\n\n // TODO @@ Remove casting of add\n store.add(\n newInstance,\n ns.dc('created'),\n new Date() as any, // @@ TODO Remove casting\n newPadDoc\n )\n if (me) {\n store.add(newInstance, ns.dc('author'), me, newPadDoc)\n }\n store.add(newInstance, PAD('next'), newInstance, newPadDoc) // linked list empty\n\n // Keep a paper trail @@ Revisit when we have non-public ones @@ Privacy\n store.add(newInstance, ns.space('inspiration'), thisInstance, padDoc)\n store.add(newInstance, ns.space('inspiration'), thisInstance, newPadDoc)\n if (!updater) {\n throw new Error('Have no updater')\n }\n updater.put(\n newPadDoc,\n store.statementsMatching(undefined, undefined, undefined, newPadDoc),\n 'text/turtle',\n function (_uri2, ok, message) {\n if (ok) {\n agenda.shift()!()\n } else {\n complainIfBad(\n ok,\n 'FAILED to save new notepad at: ' +\n newPadDoc.uri +\n ' : ' +\n message\n )\n console.log(\n 'FAILED to save new notepad at: ' +\n newPadDoc.uri +\n ' : ' +\n message\n )\n }\n }\n )\n })\n\n agenda.push(function () {\n setACL(newPadDoc.uri, true, function (ok: boolean, body: string) {\n complainIfBad(\n ok,\n 'Failed to set Read-Write ACL on pad data file: ' + body\n )\n if (ok) agenda.shift()!()\n })\n })\n\n agenda.push(function () {\n // give the user links to the new app\n\n const p = div.appendChild(dom.createElement('p'))\n p.setAttribute('style', 'font-size: 140%;')\n p.innerHTML =\n \"Your <a href='\" +\n newIndexDoc.uri +\n \"'><b>new notepad</b></a> is ready. \" +\n \"<br/><br/><a href='\" +\n newIndexDoc.uri +\n \"'>Go to new pad</a>\"\n })\n\n agenda.shift()!()\n // Created new data files.\n }\n\n // Update on incoming changes\n const showResults = function (exists: boolean) {\n console.log('showResults()')\n\n me = authn.currentUser()\n\n authn.checkUser().then((webId: unknown) => {\n me = webId as string\n })\n\n const title =\n store.any(subject, ns.dc('title')) || store.any(subject, ns.vcard('fn'))\n if (paneOptions.solo && typeof window !== 'undefined' && title) {\n window.document.title = title.value\n }\n options.exists = exists\n padEle = pad.notepad(dom, padDoc, subject, me, options)\n naviMain.appendChild(padEle)\n\n const partipationTarget =\n store.any(subject, ns.meeting('parentMeeting')) || subject\n pad.manageParticipation(\n dom,\n naviMiddle2,\n padDoc,\n partipationTarget as any,\n me,\n options\n )\n if (!store.updater) {\n throw new Error('Store has no updater')\n }\n\n store.updater.setRefreshHandler(padDoc, padEle.reloadAndSync) // initiated =\n }\n\n // Read or create empty data file\n const loadPadData = function () {\n if (!fetcher) {\n throw new Error('Have no fetcher')\n }\n fetcher.nowOrWhenFetched(padDoc.uri, undefined, function (\n ok: boolean,\n body: string,\n response: any\n ) {\n if (!ok) {\n if (response.status === 404) {\n // / Check explicitly for 404 error\n console.log('Initializing results file ' + padDoc)\n if (!updater) {\n throw new Error('Have no updater')\n }\n updater.put(padDoc, [], 'text/turtle', function (\n _uri2,\n ok,\n message\n ) {\n if (ok) {\n clearElement(naviMain)\n showResults(false)\n } else {\n complainIfBad(\n ok,\n 'FAILED to create results file at: ' +\n padDoc.uri +\n ' : ' +\n message\n )\n console.log(\n 'FAILED to craete results file at: ' +\n padDoc.uri +\n ' : ' +\n message\n )\n }\n })\n } else {\n // Other error, not 404 -- do not try to overwite the file\n complainIfBad(ok, 'FAILED to read results file: ' + body)\n }\n } else {\n // Happy read\n clearElement(naviMain)\n if (store.holds(subject, ns.rdf('type'), ns.wf('TemplateInstance'))) {\n showBootstrap(subject, naviMain, 'pad')\n }\n showResults(true)\n naviMiddle3.appendChild(newInstanceButton())\n }\n })\n }\n\n // Body of Pane\n const appPathSegment = 'app-pad.timbl.com' // how to allocate this string and connect to\n\n const fetcher = store.fetcher\n const updater = store.updater\n let me: any\n\n const PAD = Namespace('http://www.w3.org/ns/pim/pad#')\n\n const thisInstance = subject\n const padDoc = subject.doc()\n\n let padEle\n\n const div = dom.createElement('div')\n\n // Build the DOM\n const structure = div.appendChild(dom.createElement('table')) // @@ make responsive style\n structure.setAttribute(\n 'style',\n 'background-color: white; min-width: 94%; margin-right:3% margin-left: 3%; min-height: 13em;'\n )\n\n const naviLoginoutTR = structure.appendChild(dom.createElement('tr'))\n naviLoginoutTR.appendChild(dom.createElement('td')) // naviLoginout1\n naviLoginoutTR.appendChild(dom.createElement('td'))\n naviLoginoutTR.appendChild(dom.createElement('td'))\n\n const naviTop = structure.appendChild(dom.createElement('tr')) // stuff\n const naviMain = naviTop.appendChild(dom.createElement('td'))\n naviMain.setAttribute('colspan', '3')\n\n const naviMiddle = structure.appendChild(dom.createElement('tr')) // controls\n const naviMiddle1 = naviMiddle.appendChild(dom.createElement('td'))\n const naviMiddle2 = naviMiddle.appendChild(dom.createElement('td'))\n const naviMiddle3 = naviMiddle.appendChild(dom.createElement('td'))\n\n const naviStatus = structure.appendChild(dom.createElement('tr')) // status etc\n const statusArea = naviStatus.appendChild(dom.createElement('div'))\n\n const naviSpawn = structure.appendChild(dom.createElement('tr')) // create new\n const spawnArea = naviSpawn.appendChild(dom.createElement('div'))\n\n const naviMenu = structure.appendChild(dom.createElement('tr'))\n naviMenu.setAttribute('class', 'naviMenu')\n // naviMenu.setAttribute('style', 'margin-top: 3em;');\n naviMenu.appendChild(dom.createElement('td')) // naviLeft\n naviMenu.appendChild(dom.createElement('td'))\n naviMenu.appendChild(dom.createElement('td'))\n\n const options: any = { statusArea: statusArea, timingArea: naviMiddle1 }\n\n loadPadData()\n\n return div\n }\n}\n// ends\n\nexport default paneDef\n"],"mappings":";;;;;;AAAA;AACA;AACA;AAEA;AACA;AACA;;AAEA,IAAMA,OAAuB,GAAG;EAC9B;EACAC,IAAI,EAAEC,cAAK,CAACC,QAAQ,GAAG,gBAAgB;EAEvCC,IAAI,EAAE,KAAK;EAEXC,QAAQ,EAAE,CAACC,WAAE,CAACC,KAAK,CAAC,WAAW,CAAC,CAAC;EAEjC;EACAC,KAAK,EAAE,eAAUC,OAAO,EAAEC,OAAO,EAAE;IACjC,IAAMC,CAAC,GAAID,OAAO,CAACE,OAAO,CAACC,KAAK,CAAWC,YAAY,CAACL,OAAO,CAAC;IAChE,IAAIE,CAAC,CAAC,sCAAsC,CAAC,EAAE;MAC7C,OAAO,KAAK;IACd;IACA,OAAO,IAAI,EAAC;EACd,CAAC;;EAEDI,SAAS,EAAET,WAAE,CAACU,GAAG,CAAC,SAAS,CAAC;EAE5BC,OAAO,EAAE,iBAAUP,OAAO,EAAEQ,cAAmB,EAAE;IAC/C,IAAML,KAAK,GAAGH,OAAO,CAACE,OAAO,CAACC,KAAc;IAC5C,IAAMM,OAAO,GAAGN,KAAK,CAACM,OAAO;IAC7B,IAAID,cAAc,CAACE,EAAE,IAAI,CAACF,cAAc,CAACE,EAAE,CAACC,GAAG,EAAE;MAC/C,MAAM,IAAIC,KAAK,CAAC,kCAAkC,CAAC;IACrD;IAEA,IAAMC,WAAW,GAAIL,cAAc,CAACK,WAAW,GAC7CL,cAAc,CAACK,WAAW,IAC1BV,KAAK,CAACW,GAAG,CAACN,cAAc,CAACO,OAAO,GAAG,gBAAgB,CAAE;IACvD;IACA,IAAMC,SAAS,GAAGH,WAAW,CAACI,GAAG,EAAE;IAEnCd,KAAK,CAACe,GAAG,CAACL,WAAW,EAAEjB,WAAE,CAACuB,GAAG,CAAC,MAAM,CAAC,EAAEvB,WAAE,CAACU,GAAG,CAAC,SAAS,CAAC,EAAEU,SAAS,CAAC;IACpEb,KAAK,CAACe,GAAG,CAACL,WAAW,EAAEjB,WAAE,CAACwB,EAAE,CAAC,OAAO,CAAC,EAAE,cAAc,EAAEJ,SAAS,CAAC;IACjEb,KAAK,CAACe,GAAG,CAACL,WAAW,EAAEjB,WAAE,CAACwB,EAAE,CAAC,SAAS,CAAC,EAAE,IAAIC,IAAI,EAAE,EAASL,SAAS,CAAC,EAAC;IACvE,IAAIR,cAAc,CAACE,EAAE,EAAE;MACrBP,KAAK,CAACe,GAAG,CAACL,WAAW,EAAEjB,WAAE,CAACwB,EAAE,CAAC,QAAQ,CAAC,EAAEZ,cAAc,CAACE,EAAE,EAAEM,SAAS,CAAC;IACvE;IACA;IACA;IACA,IAAMM,KAAK,GAAGnB,KAAK,CAACW,GAAG,CAACD,WAAW,CAACF,GAAG,GAAG,QAAQ,CAAC;IACnDR,KAAK,CAACe,GAAG,CAACL,WAAW,EAAEjB,WAAE,CAACU,GAAG,CAAC,MAAM,CAAC,EAAEgB,KAAK,EAAEN,SAAS,CAAC,EAAC;IACzDb,KAAK,CAACe,GAAG,CAACI,KAAK,EAAE1B,WAAE,CAACU,GAAG,CAAC,MAAM,CAAC,EAAEO,WAAW,EAAEG,SAAS,CAAC;IACxDb,KAAK,CAACe,GAAG,CAACI,KAAK,EAAE1B,WAAE,CAACwB,EAAE,CAAC,QAAQ,CAAC,EAAEZ,cAAc,CAACE,EAAE,EAAEM,SAAS,CAAC;IAC/Db,KAAK,CAACe,GAAG,CAACI,KAAK,EAAE1B,WAAE,CAAC2B,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAEP,SAAS,CAAC;IAEnD,OAAO,IAAIQ,OAAO,CAAC,UAAUC,OAAO,EAAEC,MAAM,EAAE;MAC5C,IAAI,CAACjB,OAAO,EAAE;QACZiB,MAAM,CAAC,IAAId,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACpC;MACF;MACAH,OAAO,CAACkB,GAAG,CACTX,SAAS,EACTb,KAAK,CAACyB,kBAAkB,CAACC,SAAS,EAAEA,SAAS,EAAEA,SAAS,EAAEb,SAAS,CAAC,EACpE,aAAa,EACb,UAAUc,IAAI,EAAEC,EAAE,EAAEC,OAAO,EAAE;QAC3B,IAAID,EAAE,EAAE;UACNN,OAAO,CAACjB,cAAc,CAAC;QACzB,CAAC,MAAM;UACLkB,MAAM,CACJ,IAAId,KAAK,CAAC,8BAA8B,GAAGkB,IAAI,GAAG,KAAK,GAAGE,OAAO,CAAC,CACnE;QACH;MACF,CAAC,CACF;IACH,CAAC,CAAC;EACJ,CAAC;EACD;EACA;EACAC,MAAM,EAAE,gBAAUlC,OAAO,EAAEC,OAAO,EAAEkC,WAAgB,EAAE;IACpD,IAAMC,GAAG,GAAGnC,OAAO,CAACmC,GAAG;IACvB,IAAMhC,KAAK,GAAGH,OAAO,CAACE,OAAO,CAACC,KAAc;IAC5C;IACA,IAAMiC,aAAa,GAAG,SAAhBA,aAAa,CAAaL,EAAW,EAAEC,OAAe,EAAE;MAC5D,IAAI,CAACD,EAAE,EAAE;QACPM,GAAG,CAACC,WAAW,CAACC,gBAAO,CAACC,iBAAiB,CAACL,GAAG,EAAEH,OAAO,EAAE,MAAM,CAAC,CAAC;MAClE;IACF,CAAC;IAED,IAAMS,YAAY,GAAG,SAAfA,YAAY,CAAaC,GAAgB,EAAE;MAC/C,OAAOA,GAAG,CAACC,UAAU,EAAE;QACrBD,GAAG,CAACE,WAAW,CAACF,GAAG,CAACC,UAAU,CAAC;MACjC;MACA,OAAOD,GAAG;IACZ,CAAC;;IAED;;IAEA;IACA;IACA,IAAMG,UAAU,GAAG,SAAbA,UAAU,CACdC,MAAc,EACdC,MAAc,EACdC,QAAiB,EACjB;MACA,IAAMC,CAAC,GAAG,IAAAC,aAAK,GAAE;MACjB,IAAMC,IAAI,GAAG,IAAAC,iBAAS,EAAC,gCAAgC,CAAC;MACxD,IAAIC,CAAC,GAAGJ,CAAC,CAACnC,GAAG,CAACiC,MAAM,GAAG,KAAK,CAAC;MAC7B,IAAMO,GAAG,GAAGL,CAAC,CAACnC,GAAG,CAACiC,MAAM,CAAC;MACzB,IAAM9B,GAAG,GAAGgC,CAAC,CAACnC,GAAG,CAACgC,MAAM,CAAC;MACzBG,CAAC,CAAC/B,GAAG,CAACmC,CAAC,EAAEzD,WAAE,CAACuB,GAAG,CAAC,MAAM,CAAC,EAAEgC,IAAI,CAAC,eAAe,CAAC,EAAEG,GAAG,CAAC;MACpDL,CAAC,CAAC/B,GAAG,CAACmC,CAAC,EAAEF,IAAI,CAAC,UAAU,CAAC,EAAElC,GAAG,EAAEqC,GAAG,CAAC;MACpCL,CAAC,CAAC/B,GAAG,CAACmC,CAAC,EAAEF,IAAI,CAAC,OAAO,CAAC,EAAEzC,EAAE,EAAE4C,GAAG,CAAC;MAChCL,CAAC,CAAC/B,GAAG,CAACmC,CAAC,EAAEF,IAAI,CAAC,MAAM,CAAC,EAAEA,IAAI,CAAC,MAAM,CAAC,EAAEG,GAAG,CAAC;MACzCL,CAAC,CAAC/B,GAAG,CAACmC,CAAC,EAAEF,IAAI,CAAC,MAAM,CAAC,EAAEA,IAAI,CAAC,OAAO,CAAC,EAAEG,GAAG,CAAC;MAC1CL,CAAC,CAAC/B,GAAG,CAACmC,CAAC,EAAEF,IAAI,CAAC,MAAM,CAAC,EAAEA,IAAI,CAAC,SAAS,CAAC,EAAEG,GAAG,CAAC;MAE5CD,CAAC,GAAGJ,CAAC,CAACnC,GAAG,CAACiC,MAAM,GAAG,KAAK,CAAC;MACzBE,CAAC,CAAC/B,GAAG,CAACmC,CAAC,EAAEzD,WAAE,CAACuB,GAAG,CAAC,MAAM,CAAC,EAAEgC,IAAI,CAAC,eAAe,CAAC,EAAEG,GAAG,CAAC;MACpDL,CAAC,CAAC/B,GAAG,CAACmC,CAAC,EAAEF,IAAI,CAAC,UAAU,CAAC,EAAElC,GAAG,EAAEqC,GAAG,CAAC;MACpCL,CAAC,CAAC/B,GAAG,CAACmC,CAAC,EAAEF,IAAI,CAAC,YAAY,CAAC,EAAEvD,WAAE,CAAC2D,IAAI,CAAC,OAAO,CAAC,EAAED,GAAG,CAAC;MACnDL,CAAC,CAAC/B,GAAG,CAACmC,CAAC,EAAEF,IAAI,CAAC,MAAM,CAAC,EAAEA,IAAI,CAAC,MAAM,CAAC,EAAEG,GAAG,CAAC;MACzC,IAAIN,QAAQ,EAAE;QACZC,CAAC,CAAC/B,GAAG,CAACmC,CAAC,EAAEF,IAAI,CAAC,MAAM,CAAC,EAAEA,IAAI,CAAC,OAAO,CAAC,EAAEG,GAAG,CAAC;MAC5C;MACA;MACA,OAAO,IAAAE,iBAAS,EAACF,GAAG,EAAEL,CAAC,EAAEF,MAAM,EAAE,aAAa,CAAC;IACjD,CAAC;;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;IACI,IAAMU,MAAM,GAAG,SAASA,MAAM,CAC5BX,MAAc,EACdE,QAAiB,EACjBU,gBAA0B,EAC1B;MACA,IAAMC,MAAM,GAAGxD,KAAK,CAACyD,GAAG,CACtB,IAAA9C,WAAG,EAACgC,MAAM,CAAC,EACX,IAAAhC,WAAG,EAAC,oDAAoD,CAAC,CAC7C,EAAC;MACf,IAAI,CAAC+C,OAAO,EAAE;QACZ,MAAM,IAAIjD,KAAK,CAAC,iBAAiB,CAAC;MACpC;MACA,IAAI+C,MAAM,EAAE;QACV;QACA,IAAMG,OAAO,GAAGjB,UAAU,CAACC,MAAM,EAAEa,MAAM,CAAChD,GAAG,EAAEqC,QAAQ,CAAC;QACxD,OAAOa,OAAO,CACXE,YAAY,CAAC,KAAK,EAAEJ,MAAM,CAAChD,GAAG,EAAE;UAC/BqD,IAAI,EAAEF,OAAO;UACbG,WAAW,EAAE;QACf,CAAC,CAAC,CACDC,IAAI,CAAC;UAAA,OAAMR,gBAAgB,CAAC,IAAI,CAAC;QAAA,EAAC,SAC7B,CAAC,UAAAS,GAAG,EAAI;UACZT,gBAAgB,CAAC,KAAK,EAAES,GAAG,CAACnC,OAAO,CAAC;QACtC,CAAC,CAAC;MACN,CAAC,MAAM;QACL,OAAO6B,OAAO,CACXO,IAAI,CAACtB,MAAM,CAAC,SACP,CAAC,UAACqB,GAAU,EAAK;UACrBT,gBAAgB,CAAC,KAAK,EAAE,2BAA2B,GAAGS,GAAG,CAAC;QAC5D,CAAC,CAAC,CACDD,IAAI,CAAC,YAAM;UACV,IAAMP,MAAM,GAAGxD,KAAK,CAACyD,GAAG,CACtB,IAAA9C,WAAG,EAACgC,MAAM,CAAC,EACX,IAAAhC,WAAG,EAAC,oDAAoD,CAAC,CAC7C;UAEd,IAAI,CAAC6C,MAAM,EAAE;YACX;YACA,MAAM,IAAI/C,KAAK,CAAC,6BAA6B,GAAGkC,MAAM,CAAC;UACzD;UAEA,IAAMgB,OAAO,GAAGjB,UAAU,CAACC,MAAM,EAAEa,MAAM,CAAChD,GAAG,EAAEqC,QAAQ,CAAC;UAExD,OAAOa,OAAO,CAACE,YAAY,CAAC,KAAK,EAAEJ,MAAM,CAAChD,GAAG,EAAE;YAC7CqD,IAAI,EAAEF,OAAO;YACbG,WAAW,EAAE;UACf,CAAC,CAAC;QACJ,CAAC,CAAC,CACDC,IAAI,CAAC;UAAA,OAAMR,gBAAgB,CAAC,IAAI,CAAC;QAAA,EAAC,SAC7B,CAAC,UAAAS,GAAG,EAAI;UACZT,gBAAgB,CAAC,KAAK,EAAES,GAAG,CAACnC,OAAO,CAAC;QACtC,CAAC,CAAC;MACN;IACF,CAAC;;IAED;IACA;IACA;IACA,IAAMqC,iBAAiB,GAAG,SAApBA,iBAAiB,GAAe;MACpC,IAAMC,MAAM,GAAGjC,GAAG,CAACC,WAAW,CAACH,GAAG,CAACoC,aAAa,CAAC,QAAQ,CAAC,CAAC;MAC3DD,MAAM,CAACE,WAAW,GAAG,mBAAmB;MACxCF,MAAM,CAACG,gBAAgB,CAAC,OAAO,EAAE,YAAY;QAC3C,OAAOC,aAAa,CAAC3E,OAAO,EAAE4E,SAAS,EAAE,KAAK,CAAC;MACjD,CAAC,CAAC;MACF,OAAOL,MAAM;IACf,CAAC;;IAED;IACA,IAAMI,aAAa,GAAG,SAASA,aAAa,CAC1CE,YAAiB,EACjBC,SAAsB,EACtBC,IAAY,EACZ;MACA,IAAMzC,GAAG,GAAGI,YAAY,CAACoC,SAAS,CAAC;MACnC,IAAME,UAAU,GAAG;QAAED,IAAI,EAAE;MAAU,CAAe;MACpDzC,GAAG,CAACC,WAAW,CACb0C,cAAK,CAACC,cAAc,CAAC9C,GAAG,EAAE4C,UAAU,EAAE,UAACG,SAAwB,EAAEnE,OAAO,EAAK;QAC3E;QACA;QACA,OAAOoE,gCAAgC,CAAC,IAAIC,iBAAS,CAACF,SAAS,IAAInE,OAAO,CAAC,CAAC;MAC9E,CAAC,CAAC,CACH;MAEDsB,GAAG,CAACC,WAAW,CAACH,GAAG,CAACoC,aAAa,CAAC,IAAI,CAAC,CAAC,EAAC;;MAEzC,IAAMc,CAAC,GAAGhD,GAAG,CAACC,WAAW,CAACH,GAAG,CAACoC,aAAa,CAAC,GAAG,CAAC,CAAC;MACjDc,CAAC,CAACb,WAAW,GACX,iDAAiD,GACjDM,IAAI,GACJ,KAAK,GACL,qEAAqE;MACvE,IAAMQ,SAAS,GAAGjD,GAAG,CAACC,WAAW,CAACH,GAAG,CAACoC,aAAa,CAAC,OAAO,CAAC,CAAC;MAC7De,SAAS,CAACC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC;MACtCD,SAAS,CAACE,IAAI,GAAG,EAAE,CAAC;MAAA;MAClBF,SAAS,CAASxF,KAAK,GAAG,UAAU;MACtCwF,SAAS,CAACG,YAAY,GAAG,IAAI;MAE7BpD,GAAG,CAACC,WAAW,CAACH,GAAG,CAACoC,aAAa,CAAC,IAAI,CAAC,CAAC,EAAC;;MAEzC,IAAMD,MAAM,GAAGjC,GAAG,CAACC,WAAW,CAACH,GAAG,CAACoC,aAAa,CAAC,QAAQ,CAAC,CAAC;MAC3DD,MAAM,CAACE,WAAW,GAAG,YAAY,GAAGM,IAAI,GAAG,cAAc;MACzDR,MAAM,CAACG,gBAAgB,CAAC,OAAO,EAAE,UAAUiB,EAAE,EAAE;QAC7C,IAAI3E,OAAO,GAAGuE,SAAS,CAACK,KAAK;QAC7B,IAAI5E,OAAO,CAAC6E,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;UAC7B7E,OAAO,IAAI,GAAG;QAChB;QACA8E,2BAA2B,CAACjB,YAAY,EAAE7D,OAAO,CAAC;MACpD,CAAC,CAAC;IACJ,CAAC;;IAED;IACA,IAAMoE,gCAAgC,GAAG,SAAnCA,gCAAgC,CAAaW,EAAa,EAAE;MAChE;MACA,IAAI/E,OAAY,GAAGZ,KAAK,CAACyD,GAAG,CAACkC,EAAE,EAAElG,WAAE,CAACmG,KAAK,CAAC,WAAW,CAAC,CAAC;MACvD,IAAI,CAAChF,OAAO,EAAE;QACZA,OAAO,GAAG+E,EAAE,CAACnF,GAAG,CAACqF,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;MAChC,CAAC,MAAM;QACLjF,OAAO,GAAGA,OAAO,CAAC4E,KAAK;MACzB;MACA,IAAI5E,OAAO,CAAC6E,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;QAC7BK,WAAG,CAACC,KAAK,CAACC,cAAc,GAAG,6BAA6B,GAAGpF,OAAO,CAAC,EAAC;QACpEA,OAAO,GAAGA,OAAO,GAAG,GAAG;MACzB;MACA,IAAMqF,GAAG,GAAG,IAAI/E,IAAI,EAAE;MACtBN,OAAO,IAAIoF,cAAc,GAAG,KAAK,GAAGC,GAAG,CAACC,OAAO,EAAE,GAAG,GAAG,EAAC;;MAExDR,2BAA2B,CAACjB,YAAY,EAAE7D,OAAO,CAAC;IACpD,CAAC;IAED,IAAM8E,2BAA2B,GAAG,SAA9BA,2BAA2B,CAC/BjB,YAAiB,EACjB7D,OAAe,EACf;MACA,IAAMuF,IAAI,GAAG,IAAAxF,WAAG,EAAC8D,YAAY,CAACjE,GAAG,CAACqF,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;MAChD,IAAMO,IAAI,GAAGD,IAAI,EAAC;;MAElB,IAAMtF,SAAS,GAAGb,KAAK,CAACW,GAAG,CAACC,OAAO,GAAG,SAAS,CAAC;MAChD,IAAMyF,WAAW,GAAGrG,KAAK,CAACW,GAAG,CAACC,OAAO,GAAG,YAAY,CAAC;MAErD,IAAM0F,UAAU,GAAG,CAAC;QAAEC,KAAK,EAAE,YAAY;QAAEzC,WAAW,EAAE;MAAY,CAAC,CAAC;MAEtE,IAAMpD,WAAW,GAAGV,KAAK,CAACW,GAAG,CAACE,SAAS,CAACL,GAAG,GAAG,UAAU,CAAC;;MAEzD;;MAEA,IAAMgG,MAAkB,GAAG,EAAE;MAE7B,IAAIC,CAAC,EAAC;MACN,KAAKA,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGH,UAAU,CAACI,MAAM,EAAED,CAAC,EAAE,EAAE;QACtC,IAAME,IAAI,GAAGL,UAAU,CAACG,CAAC,CAAC;QAC1B,IAAMG,GAAG,GAAG,SAASC,QAAQ,CAAEF,IAAS,EAAE;UACxCH,MAAM,CAACM,IAAI,CAAC,YAAY;YACtB,IAAMC,MAAM,GAAGnG,OAAO,GAAG+F,IAAI,CAACJ,KAAK;YACnCS,OAAO,CAAClB,GAAG,CAAC,UAAU,GAAGM,IAAI,GAAGO,IAAI,CAACJ,KAAK,GAAG,MAAM,GAAGQ,MAAM,CAAC;YAE7D,IAAME,UAAU,GAAG,SAAbA,UAAU,GAAe;cAC7B3D,MAAM,CAACyD,MAAM,EAAE,KAAK,EAAE,UAAUnF,EAAW,EAAEC,OAAe,EAAE;gBAC5D,IAAI,CAACD,EAAE,EAAE;kBACPK,aAAa,CACXL,EAAE,EACF,oBAAoB,GAAGmF,MAAM,GAAG,KAAK,GAAGlF,OAAO,CAChD;kBACDmF,OAAO,CAAClB,GAAG,CAAC,oBAAoB,GAAGiB,MAAM,GAAG,KAAK,GAAGlF,OAAO,CAAC;gBAC9D,CAAC,MAAM;kBACL2E,MAAM,CAACU,KAAK,EAAE,EAAG,EAAC;gBACpB;cACF,CAAC,CAAC;YACJ,CAAC;;YACD,IAAI,CAAClH,KAAK,CAAC0D,OAAO,EAAE;cAClB,MAAM,IAAIjD,KAAK,CAAC,sBAAsB,CAAC;YACzC;YACAT,KAAK,CAAC0D,OAAO,CACVyD,OAAO,CACNf,IAAI,GAAGO,IAAI,CAACJ,KAAK,EACjB3F,OAAO,GAAG+F,IAAI,CAACJ,KAAK,EACpBI,IAAI,CAAC7C,WAAW,CACjB,CACAC,IAAI,CAAC;cAAA,OAAMqD,iBAAK,CAACC,SAAS,EAAE;YAAA,EAAC,CAC7BtD,IAAI,CAAC,UAAAuD,KAAK,EAAI;cACb/G,EAAE,GAAG+G,KAAK;cAEVL,UAAU,EAAE;YACd,CAAC,CAAC,SACI,CAAC,UAAAjD,GAAG,EAAI;cACZgD,OAAO,CAAClB,GAAG,CACT,iBAAiB,GAAGM,IAAI,GAAGO,IAAI,CAACJ,KAAK,GAAG,KAAK,GAAGvC,GAAG,CAACnC,OAAO,CAC5D;cACDI,aAAa,CACX,KAAK,EACL,iBAAiB,GAAGmE,IAAI,GAAGO,IAAI,CAACJ,KAAK,GAAG,KAAK,GAAGvC,GAAG,CAACnC,OAAO,CAC5D;YACH,CAAC,CAAC;UACN,CAAC,CAAC;QACJ,CAAC;QACD+E,GAAG,CAACD,IAAI,CAAC;MACX;MAEAH,MAAM,CAACM,IAAI,CAAC,SAASS,oBAAoB,GAAI;QAC3CvH,KAAK,CAACe,GAAG,CAACL,WAAW,EAAEjB,WAAE,CAACuB,GAAG,CAAC,MAAM,CAAC,EAAEwG,GAAG,CAAC,SAAS,CAAC,EAAE3G,SAAS,CAAC;;QAEjE;QACAb,KAAK,CAACe,GAAG,CACPL,WAAW,EACXjB,WAAE,CAACwB,EAAE,CAAC,SAAS,CAAC,EAChB,IAAIC,IAAI,EAAE;QAAS;QACnBL,SAAS,CACV;QACD,IAAIN,EAAE,EAAE;UACNP,KAAK,CAACe,GAAG,CAACL,WAAW,EAAEjB,WAAE,CAACwB,EAAE,CAAC,QAAQ,CAAC,EAAEV,EAAE,EAAEM,SAAS,CAAC;QACxD;QACAb,KAAK,CAACe,GAAG,CAACL,WAAW,EAAE8G,GAAG,CAAC,MAAM,CAAC,EAAE9G,WAAW,EAAEG,SAAS,CAAC,EAAC;;QAE5D;QACAb,KAAK,CAACe,GAAG,CAACL,WAAW,EAAEjB,WAAE,CAACmG,KAAK,CAAC,aAAa,CAAC,EAAEnB,YAAY,EAAEgD,MAAM,CAAC;QACrEzH,KAAK,CAACe,GAAG,CAACL,WAAW,EAAEjB,WAAE,CAACmG,KAAK,CAAC,aAAa,CAAC,EAAEnB,YAAY,EAAE5D,SAAS,CAAC;QACxE,IAAI,CAACP,OAAO,EAAE;UACZ,MAAM,IAAIG,KAAK,CAAC,iBAAiB,CAAC;QACpC;QACAH,OAAO,CAACkB,GAAG,CACTX,SAAS,EACTb,KAAK,CAACyB,kBAAkB,CAACC,SAAS,EAAEA,SAAS,EAAEA,SAAS,EAAEb,SAAS,CAAC,EACpE,aAAa,EACb,UAAU6G,KAAK,EAAE9F,EAAE,EAAEC,OAAO,EAAE;UAC5B,IAAID,EAAE,EAAE;YACN4E,MAAM,CAACU,KAAK,EAAE,EAAG;UACnB,CAAC,MAAM;YACLjF,aAAa,CACXL,EAAE,EACF,iCAAiC,GAC/Bf,SAAS,CAACL,GAAG,GACb,KAAK,GACLqB,OAAO,CACV;YACDmF,OAAO,CAAClB,GAAG,CACT,iCAAiC,GAC/BjF,SAAS,CAACL,GAAG,GACb,KAAK,GACLqB,OAAO,CACV;UACH;QACF,CAAC,CACF;MACH,CAAC,CAAC;MAEF2E,MAAM,CAACM,IAAI,CAAC,YAAY;QACtBxD,MAAM,CAACzC,SAAS,CAACL,GAAG,EAAE,IAAI,EAAE,UAAUoB,EAAW,EAAE+F,IAAY,EAAE;UAC/D1F,aAAa,CACXL,EAAE,EACF,iDAAiD,GAAG+F,IAAI,CACzD;UACD,IAAI/F,EAAE,EAAE4E,MAAM,CAACU,KAAK,EAAE,EAAG;QAC3B,CAAC,CAAC;MACJ,CAAC,CAAC;MAEFV,MAAM,CAACM,IAAI,CAAC,YAAY;QACtB;;QAEA,IAAM5B,CAAC,GAAGhD,GAAG,CAACC,WAAW,CAACH,GAAG,CAACoC,aAAa,CAAC,GAAG,CAAC,CAAC;QACjDc,CAAC,CAACE,YAAY,CAAC,OAAO,EAAE,kBAAkB,CAAC;QAC3CF,CAAC,CAAC0C,SAAS,GACT,gBAAgB,GAChBvB,WAAW,CAAC7F,GAAG,GACf,qCAAqC,GACrC,qBAAqB,GACrB6F,WAAW,CAAC7F,GAAG,GACf,qBAAqB;MACzB,CAAC,CAAC;MAEFgG,MAAM,CAACU,KAAK,EAAE,EAAG;MACjB;IACF,CAAC;;IAED;IACA,IAAMW,WAAW,GAAG,SAAdA,WAAW,CAAaC,MAAe,EAAE;MAC7Cd,OAAO,CAAClB,GAAG,CAAC,eAAe,CAAC;MAE5BvF,EAAE,GAAG6G,iBAAK,CAACW,WAAW,EAAE;MAExBX,iBAAK,CAACC,SAAS,EAAE,CAACtD,IAAI,CAAC,UAACuD,KAAc,EAAK;QACzC/G,EAAE,GAAG+G,KAAe;MACtB,CAAC,CAAC;MAEF,IAAMU,KAAK,GACThI,KAAK,CAACyD,GAAG,CAAC7D,OAAO,EAAEH,WAAE,CAACwB,EAAE,CAAC,OAAO,CAAC,CAAC,IAAIjB,KAAK,CAACyD,GAAG,CAAC7D,OAAO,EAAEH,WAAE,CAACwI,KAAK,CAAC,IAAI,CAAC,CAAC;MAC1E,IAAIlG,WAAW,CAACmG,IAAI,IAAI,OAAOC,MAAM,KAAK,WAAW,IAAIH,KAAK,EAAE;QAC9DG,MAAM,CAACC,QAAQ,CAACJ,KAAK,GAAGA,KAAK,CAACxC,KAAK;MACrC;MACA6C,OAAO,CAACP,MAAM,GAAGA,MAAM;MACvBQ,MAAM,GAAGnI,YAAG,CAACoI,OAAO,CAACvG,GAAG,EAAEyF,MAAM,EAAE7H,OAAO,EAAEW,EAAE,EAAE8H,OAAO,CAAC;MACvDG,QAAQ,CAACrG,WAAW,CAACmG,MAAM,CAAC;MAE5B,IAAMG,iBAAiB,GACrBzI,KAAK,CAACyD,GAAG,CAAC7D,OAAO,EAAEH,WAAE,CAACiJ,OAAO,CAAC,eAAe,CAAC,CAAC,IAAI9I,OAAO;MAC5DO,YAAG,CAACwI,mBAAmB,CACrB3G,GAAG,EACH4G,WAAW,EACXnB,MAAM,EACNgB,iBAAiB,EACjBlI,EAAE,EACF8H,OAAO,CACR;MACD,IAAI,CAACrI,KAAK,CAACM,OAAO,EAAE;QAClB,MAAM,IAAIG,KAAK,CAAC,sBAAsB,CAAC;MACzC;MAEAT,KAAK,CAACM,OAAO,CAACuI,iBAAiB,CAACpB,MAAM,EAAEa,MAAM,CAACQ,aAAa,CAAC,EAAC;IAChE,CAAC;;IAED;IACA,IAAMC,WAAW,GAAG,SAAdA,WAAW,GAAe;MAC9B,IAAI,CAACrF,OAAO,EAAE;QACZ,MAAM,IAAIjD,KAAK,CAAC,iBAAiB,CAAC;MACpC;MACAiD,OAAO,CAACsF,gBAAgB,CAACvB,MAAM,CAACjH,GAAG,EAAEkB,SAAS,EAAE,UAC9CE,EAAW,EACX+F,IAAY,EACZsB,QAAa,EACb;QACA,IAAI,CAACrH,EAAE,EAAE;UACP,IAAIqH,QAAQ,CAACC,MAAM,KAAK,GAAG,EAAE;YAC3B;YACAlC,OAAO,CAAClB,GAAG,CAAC,4BAA4B,GAAG2B,MAAM,CAAC;YAClD,IAAI,CAACnH,OAAO,EAAE;cACZ,MAAM,IAAIG,KAAK,CAAC,iBAAiB,CAAC;YACpC;YACAH,OAAO,CAACkB,GAAG,CAACiG,MAAM,EAAE,EAAE,EAAE,aAAa,EAAE,UACrCC,KAAK,EACL9F,EAAE,EACFC,OAAO,EACP;cACA,IAAID,EAAE,EAAE;gBACNU,YAAY,CAACkG,QAAQ,CAAC;gBACtBX,WAAW,CAAC,KAAK,CAAC;cACpB,CAAC,MAAM;gBACL5F,aAAa,CACXL,EAAE,EACF,oCAAoC,GAClC6F,MAAM,CAACjH,GAAG,GACV,KAAK,GACLqB,OAAO,CACV;gBACDmF,OAAO,CAAClB,GAAG,CACT,oCAAoC,GAClC2B,MAAM,CAACjH,GAAG,GACV,KAAK,GACLqB,OAAO,CACV;cACH;YACF,CAAC,CAAC;UACJ,CAAC,MAAM;YACL;YACAI,aAAa,CAACL,EAAE,EAAE,+BAA+B,GAAG+F,IAAI,CAAC;UAC3D;QACF,CAAC,MAAM;UACL;UACArF,YAAY,CAACkG,QAAQ,CAAC;UACtB,IAAIxI,KAAK,CAACmJ,KAAK,CAACvJ,OAAO,EAAEH,WAAE,CAACuB,GAAG,CAAC,MAAM,CAAC,EAAEvB,WAAE,CAAC2J,EAAE,CAAC,kBAAkB,CAAC,CAAC,EAAE;YACnE7E,aAAa,CAAC3E,OAAO,EAAE4I,QAAQ,EAAE,KAAK,CAAC;UACzC;UACAX,WAAW,CAAC,IAAI,CAAC;UACjBwB,WAAW,CAAClH,WAAW,CAAC+B,iBAAiB,EAAE,CAAC;QAC9C;MACF,CAAC,CAAC;IACJ,CAAC;;IAED;IACA,IAAM8B,cAAc,GAAG,mBAAmB,EAAC;;IAE3C,IAAMtC,OAAO,GAAG1D,KAAK,CAAC0D,OAAO;IAC7B,IAAMpD,OAAO,GAAGN,KAAK,CAACM,OAAO;IAC7B,IAAIC,EAAO;IAEX,IAAMiH,GAAG,GAAG,IAAAvE,iBAAS,EAAC,+BAA+B,CAAC;IAEtD,IAAMwB,YAAY,GAAG7E,OAAO;IAC5B,IAAM6H,MAAM,GAAG7H,OAAO,CAACkB,GAAG,EAAE;IAE5B,IAAIwH,MAAM;IAEV,IAAMpG,GAAG,GAAGF,GAAG,CAACoC,aAAa,CAAC,KAAK,CAAC;;IAEpC;IACA,IAAMkF,SAAS,GAAGpH,GAAG,CAACC,WAAW,CAACH,GAAG,CAACoC,aAAa,CAAC,OAAO,CAAC,CAAC,EAAC;IAC9DkF,SAAS,CAAClE,YAAY,CACpB,OAAO,EACP,6FAA6F,CAC9F;IAED,IAAMmE,cAAc,GAAGD,SAAS,CAACnH,WAAW,CAACH,GAAG,CAACoC,aAAa,CAAC,IAAI,CAAC,CAAC;IACrEmF,cAAc,CAACpH,WAAW,CAACH,GAAG,CAACoC,aAAa,CAAC,IAAI,CAAC,CAAC,EAAC;IACpDmF,cAAc,CAACpH,WAAW,CAACH,GAAG,CAACoC,aAAa,CAAC,IAAI,CAAC,CAAC;IACnDmF,cAAc,CAACpH,WAAW,CAACH,GAAG,CAACoC,aAAa,CAAC,IAAI,CAAC,CAAC;IAEnD,IAAMoF,OAAO,GAAGF,SAAS,CAACnH,WAAW,CAACH,GAAG,CAACoC,aAAa,CAAC,IAAI,CAAC,CAAC,EAAC;IAC/D,IAAMoE,QAAQ,GAAGgB,OAAO,CAACrH,WAAW,CAACH,GAAG,CAACoC,aAAa,CAAC,IAAI,CAAC,CAAC;IAC7DoE,QAAQ,CAACpD,YAAY,CAAC,SAAS,EAAE,GAAG,CAAC;IAErC,IAAMqE,UAAU,GAAGH,SAAS,CAACnH,WAAW,CAACH,GAAG,CAACoC,aAAa,CAAC,IAAI,CAAC,CAAC,EAAC;IAClE,IAAMsF,WAAW,GAAGD,UAAU,CAACtH,WAAW,CAACH,GAAG,CAACoC,aAAa,CAAC,IAAI,CAAC,CAAC;IACnE,IAAMwE,WAAW,GAAGa,UAAU,CAACtH,WAAW,CAACH,GAAG,CAACoC,aAAa,CAAC,IAAI,CAAC,CAAC;IACnE,IAAMiF,WAAW,GAAGI,UAAU,CAACtH,WAAW,CAACH,GAAG,CAACoC,aAAa,CAAC,IAAI,CAAC,CAAC;IAEnE,IAAMuF,UAAU,GAAGL,SAAS,CAACnH,WAAW,CAACH,GAAG,CAACoC,aAAa,CAAC,IAAI,CAAC,CAAC,EAAC;IAClE,IAAMwF,UAAU,GAAGD,UAAU,CAACxH,WAAW,CAACH,GAAG,CAACoC,aAAa,CAAC,KAAK,CAAC,CAAC;IAEnE,IAAMyF,SAAS,GAAGP,SAAS,CAACnH,WAAW,CAACH,GAAG,CAACoC,aAAa,CAAC,IAAI,CAAC,CAAC,EAAC;IACjE,IAAMI,SAAS,GAAGqF,SAAS,CAAC1H,WAAW,CAACH,GAAG,CAACoC,aAAa,CAAC,KAAK,CAAC,CAAC;IAEjE,IAAM0F,QAAQ,GAAGR,SAAS,CAACnH,WAAW,CAACH,GAAG,CAACoC,aAAa,CAAC,IAAI,CAAC,CAAC;IAC/D0F,QAAQ,CAAC1E,YAAY,CAAC,OAAO,EAAE,UAAU,CAAC;IAC1C;IACA0E,QAAQ,CAAC3H,WAAW,CAACH,GAAG,CAACoC,aAAa,CAAC,IAAI,CAAC,CAAC,EAAC;IAC9C0F,QAAQ,CAAC3H,WAAW,CAACH,GAAG,CAACoC,aAAa,CAAC,IAAI,CAAC,CAAC;IAC7C0F,QAAQ,CAAC3H,WAAW,CAACH,GAAG,CAACoC,aAAa,CAAC,IAAI,CAAC,CAAC;IAE7C,IAAMiE,OAAY,GAAG;MAAEuB,UAAU,EAAEA,UAAU;MAAEG,UAAU,EAAEL;IAAY,CAAC;IAExEX,WAAW,EAAE;IAEb,OAAO7G,GAAG;EACZ;AACF,CAAC;AACD;AAAA,eAEe/C,OAAO;AAAA"}
@@ -1,43 +1,44 @@
1
1
  "use strict";
2
2
 
3
+ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports["default"] = void 0;
8
+ var UI = _interopRequireWildcard(require("solid-ui"));
9
+ var $rdf = _interopRequireWildcard(require("rdflib"));
10
+ 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); }
11
+ 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; }
3
12
  /* Playlist Pane
4
13
  **
5
14
  ** This pane allows playlists and playlists slots to be viewed
6
15
  ** seeAlso: http://smiy.sourceforge.net/pbo/spec/playbackontology.html
7
16
  */
8
- var UI = require('solid-ui');
9
-
10
- var $rdf = require('rdflib');
11
17
 
12
18
  var ns = UI.ns;
13
- module.exports = {
19
+ var _default = {
14
20
  icon: UI.icons.iconBase + 'noun_1619.svg',
15
21
  name: 'playlistSlot',
16
22
  audience: [ns.solid('PowerUser')],
17
23
  label: function label(subject, context) {
18
24
  var kb = context.session.store;
19
-
20
25
  if (!kb.anyStatementMatching(subject, UI.ns.rdf('type'), kb.sym('http://purl.org/ontology/pbo/core#PlaylistSlot'))) {
21
26
  return null;
22
27
  }
23
-
24
28
  return 'playlist slot';
25
29
  },
26
30
  render: function render(subject, context) {
27
31
  var myDocument = context.dom;
28
-
29
32
  function isVideo(src, _index) {
30
33
  if (!src) {
31
34
  return {
32
35
  html5: true
33
36
  };
34
37
  }
35
-
36
38
  var youtube = src.match(/\/\/(?:www\.)?youtu(?:\.be|be\.com)\/(?:watch\?v=|embed\/)?([a-z0-9\-_%]+)/i);
37
39
  var vimeo = src.match(/\/\/(?:www\.)?vimeo.com\/([0-9a-z\-_]+)/i);
38
40
  var dailymotion = src.match(/\/\/(?:www\.)?dai.ly\/([0-9a-z\-_]+)/i);
39
41
  var vk = src.match(/\/\/(?:www\.)?(?:vk\.com|vkontakte\.ru)\/(?:video_ext\.php\?)(.*)/i);
40
-
41
42
  if (youtube) {
42
43
  return {
43
44
  youtube: youtube
@@ -56,7 +57,6 @@ module.exports = {
56
57
  };
57
58
  }
58
59
  }
59
-
60
60
  var link = function link(contents, uri) {
61
61
  if (!uri) return contents;
62
62
  var a = myDocument.createElement('a');
@@ -65,11 +65,9 @@ module.exports = {
65
65
  a.addEventListener('click', UI.widgets.openHrefInOutlineMode, true);
66
66
  return a;
67
67
  };
68
-
69
68
  var text = function text(str) {
70
69
  return myDocument.createTextNode(str);
71
70
  };
72
-
73
71
  var kb = context.session.store;
74
72
  var obj = kb.any(subject, $rdf.sym('http://purl.org/ontology/pbo/core#playlist_item'));
75
73
  var index = kb.any(subject, $rdf.sym('http://purl.org/ontology/olo/core#index'));
@@ -77,7 +75,6 @@ module.exports = {
77
75
  var video = isVideo(uri);
78
76
  var div = myDocument.createElement('div');
79
77
  var img;
80
-
81
78
  if (video && video.youtube) {
82
79
  uri = uri.replace('watch?v=', 'embed/');
83
80
  div.setAttribute('class', 'imageView');
@@ -96,19 +93,15 @@ module.exports = {
96
93
  img.setAttribute('height', 315);
97
94
  img.setAttribute('style', 'max-width: 560; max-height: 315;');
98
95
  }
99
-
100
96
  var descDiv;
101
-
102
97
  if (index) {
103
98
  var sl = kb.statementsMatching(null, $rdf.sym('http://purl.org/ontology/olo/core#index'));
104
99
  var slots = [];
105
-
106
100
  for (var i = 0; i < sl.length; i++) {
107
101
  if (sl[i]) {
108
102
  slots.push(parseInt(sl[i].object.value, 10));
109
103
  }
110
104
  }
111
-
112
105
  index = parseInt(index.value, 10);
113
106
  descDiv = myDocument.createElement('div');
114
107
  var pIndex = slots[(slots.indexOf(index) - 1 + slots.length) % slots.length];
@@ -121,17 +114,14 @@ module.exports = {
121
114
  var next = link(text('>>'), subject.uri.split('#')[0] + '#' + nIndex);
122
115
  descDiv.appendChild(next);
123
116
  }
124
-
125
117
  var tr = myDocument.createElement('TR'); // why need tr?
126
-
127
118
  tr.appendChild(img);
128
-
129
119
  if (descDiv) {
130
120
  tr.appendChild(descDiv);
131
121
  }
132
-
133
122
  div.appendChild(tr);
134
123
  return div;
135
124
  }
136
125
  }; // ends
126
+ exports["default"] = _default;
137
127
  //# sourceMappingURL=playlistPane.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"playlistPane.js","names":["UI","require","$rdf","ns","module","exports","icon","icons","iconBase","name","audience","solid","label","subject","context","kb","session","store","anyStatementMatching","rdf","sym","render","myDocument","dom","isVideo","src","_index","html5","youtube","match","vimeo","dailymotion","vk","link","contents","uri","a","createElement","setAttribute","appendChild","addEventListener","widgets","openHrefInOutlineMode","text","str","createTextNode","obj","any","index","video","div","img","replace","value","descDiv","sl","statementsMatching","slots","i","length","push","parseInt","object","pIndex","indexOf","nIndex","prev","split","indexDiv","innerHTML","next","tr"],"sources":["../../src/playlist/playlistPane.js"],"sourcesContent":["/* Playlist Pane\n **\n ** This pane allows playlists and playlists slots to be viewed\n ** seeAlso: http://smiy.sourceforge.net/pbo/spec/playbackontology.html\n */\nconst UI = require('solid-ui')\nconst $rdf = require('rdflib')\nconst ns = UI.ns\n\nmodule.exports = {\n icon: UI.icons.iconBase + 'noun_1619.svg',\n\n name: 'playlistSlot',\n\n audience: [ns.solid('PowerUser')],\n\n label: function (subject, context) {\n const kb = context.session.store\n\n if (\n !kb.anyStatementMatching(\n subject,\n UI.ns.rdf('type'),\n kb.sym('http://purl.org/ontology/pbo/core#PlaylistSlot')\n )\n ) {\n return null\n }\n\n return 'playlist slot'\n },\n\n render: function (subject, context) {\n const myDocument = context.dom\n function isVideo (src, _index) {\n if (!src) {\n return {\n html5: true\n }\n }\n\n const youtube = src.match(\n /\\/\\/(?:www\\.)?youtu(?:\\.be|be\\.com)\\/(?:watch\\?v=|embed\\/)?([a-z0-9\\-_%]+)/i\n )\n const vimeo = src.match(/\\/\\/(?:www\\.)?vimeo.com\\/([0-9a-z\\-_]+)/i)\n const dailymotion = src.match(/\\/\\/(?:www\\.)?dai.ly\\/([0-9a-z\\-_]+)/i)\n const vk = src.match(\n /\\/\\/(?:www\\.)?(?:vk\\.com|vkontakte\\.ru)\\/(?:video_ext\\.php\\?)(.*)/i\n )\n\n if (youtube) {\n return {\n youtube: youtube\n }\n } else if (vimeo) {\n return {\n vimeo: vimeo\n }\n } else if (dailymotion) {\n return {\n dailymotion: dailymotion\n }\n } else if (vk) {\n return {\n vk: vk\n }\n }\n }\n\n const link = function (contents, uri) {\n if (!uri) return contents\n const a = myDocument.createElement('a')\n a.setAttribute('href', uri)\n a.appendChild(contents)\n a.addEventListener('click', UI.widgets.openHrefInOutlineMode, true)\n return a\n }\n\n const text = function (str) {\n return myDocument.createTextNode(str)\n }\n\n const kb = context.session.store\n const obj = kb.any(\n subject,\n $rdf.sym('http://purl.org/ontology/pbo/core#playlist_item')\n )\n let index = kb.any(\n subject,\n $rdf.sym('http://purl.org/ontology/olo/core#index')\n )\n\n let uri = obj.uri\n const video = isVideo(uri)\n\n const div = myDocument.createElement('div')\n let img\n if (video && video.youtube) {\n uri = uri.replace('watch?v=', 'embed/')\n div.setAttribute('class', 'imageView')\n img = myDocument.createElement('IFRAME')\n img.setAttribute('src', uri)\n img.setAttribute('width', 560)\n img.setAttribute('height', 315)\n img.setAttribute('frameborder', 0)\n img.setAttribute('style', 'max-width: 850px; max-height: 100%;')\n img.setAttribute('allowfullscreen', 'true')\n } else {\n div.setAttribute('class', 'imageView')\n img = myDocument.createElement('IMG')\n img.setAttribute('src', obj.value)\n img.setAttribute('width', 560)\n img.setAttribute('height', 315)\n img.setAttribute('style', 'max-width: 560; max-height: 315;')\n }\n\n let descDiv\n if (index) {\n const sl = kb.statementsMatching(\n null,\n $rdf.sym('http://purl.org/ontology/olo/core#index')\n )\n const slots = []\n for (let i = 0; i < sl.length; i++) {\n if (sl[i]) {\n slots.push(parseInt(sl[i].object.value, 10))\n }\n }\n\n index = parseInt(index.value, 10)\n descDiv = myDocument.createElement('div')\n\n const pIndex =\n slots[(slots.indexOf(index) - 1 + slots.length) % slots.length]\n const nIndex =\n slots[(slots.indexOf(index) + 1 + slots.length) % slots.length]\n\n const prev = link(text('<<'), subject.uri.split('#')[0] + '#' + pIndex)\n\n descDiv.appendChild(prev)\n\n const indexDiv = myDocument.createElement('span')\n indexDiv.innerHTML = ' Playlist slot : ' + index + ' '\n\n descDiv.appendChild(indexDiv)\n\n const next = link(text('>>'), subject.uri.split('#')[0] + '#' + nIndex)\n descDiv.appendChild(next)\n }\n\n const tr = myDocument.createElement('TR') // why need tr?\n tr.appendChild(img)\n if (descDiv) {\n tr.appendChild(descDiv)\n }\n div.appendChild(tr)\n return div\n }\n}\n\n// ends\n"],"mappings":"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"}
1
+ {"version":3,"file":"playlistPane.js","names":["ns","UI","icon","icons","iconBase","name","audience","solid","label","subject","context","kb","session","store","anyStatementMatching","rdf","sym","render","myDocument","dom","isVideo","src","_index","html5","youtube","match","vimeo","dailymotion","vk","link","contents","uri","a","createElement","setAttribute","appendChild","addEventListener","widgets","openHrefInOutlineMode","text","str","createTextNode","obj","any","$rdf","index","video","div","img","replace","value","descDiv","sl","statementsMatching","slots","i","length","push","parseInt","object","pIndex","indexOf","nIndex","prev","split","indexDiv","innerHTML","next","tr"],"sources":["../../src/playlist/playlistPane.js"],"sourcesContent":["/* Playlist Pane\n **\n ** This pane allows playlists and playlists slots to be viewed\n ** seeAlso: http://smiy.sourceforge.net/pbo/spec/playbackontology.html\n */\n import * as UI from 'solid-ui'\n import * as $rdf from 'rdflib'\nconst ns = UI.ns\n\nexport default {\n icon: UI.icons.iconBase + 'noun_1619.svg',\n\n name: 'playlistSlot',\n\n audience: [ns.solid('PowerUser')],\n\n label: function (subject, context) {\n const kb = context.session.store\n\n if (\n !kb.anyStatementMatching(\n subject,\n UI.ns.rdf('type'),\n kb.sym('http://purl.org/ontology/pbo/core#PlaylistSlot')\n )\n ) {\n return null\n }\n\n return 'playlist slot'\n },\n\n render: function (subject, context) {\n const myDocument = context.dom\n function isVideo (src, _index) {\n if (!src) {\n return {\n html5: true\n }\n }\n\n const youtube = src.match(\n /\\/\\/(?:www\\.)?youtu(?:\\.be|be\\.com)\\/(?:watch\\?v=|embed\\/)?([a-z0-9\\-_%]+)/i\n )\n const vimeo = src.match(/\\/\\/(?:www\\.)?vimeo.com\\/([0-9a-z\\-_]+)/i)\n const dailymotion = src.match(/\\/\\/(?:www\\.)?dai.ly\\/([0-9a-z\\-_]+)/i)\n const vk = src.match(\n /\\/\\/(?:www\\.)?(?:vk\\.com|vkontakte\\.ru)\\/(?:video_ext\\.php\\?)(.*)/i\n )\n\n if (youtube) {\n return {\n youtube: youtube\n }\n } else if (vimeo) {\n return {\n vimeo: vimeo\n }\n } else if (dailymotion) {\n return {\n dailymotion: dailymotion\n }\n } else if (vk) {\n return {\n vk: vk\n }\n }\n }\n\n const link = function (contents, uri) {\n if (!uri) return contents\n const a = myDocument.createElement('a')\n a.setAttribute('href', uri)\n a.appendChild(contents)\n a.addEventListener('click', UI.widgets.openHrefInOutlineMode, true)\n return a\n }\n\n const text = function (str) {\n return myDocument.createTextNode(str)\n }\n\n const kb = context.session.store\n const obj = kb.any(\n subject,\n $rdf.sym('http://purl.org/ontology/pbo/core#playlist_item')\n )\n let index = kb.any(\n subject,\n $rdf.sym('http://purl.org/ontology/olo/core#index')\n )\n\n let uri = obj.uri\n const video = isVideo(uri)\n\n const div = myDocument.createElement('div')\n let img\n if (video && video.youtube) {\n uri = uri.replace('watch?v=', 'embed/')\n div.setAttribute('class', 'imageView')\n img = myDocument.createElement('IFRAME')\n img.setAttribute('src', uri)\n img.setAttribute('width', 560)\n img.setAttribute('height', 315)\n img.setAttribute('frameborder', 0)\n img.setAttribute('style', 'max-width: 850px; max-height: 100%;')\n img.setAttribute('allowfullscreen', 'true')\n } else {\n div.setAttribute('class', 'imageView')\n img = myDocument.createElement('IMG')\n img.setAttribute('src', obj.value)\n img.setAttribute('width', 560)\n img.setAttribute('height', 315)\n img.setAttribute('style', 'max-width: 560; max-height: 315;')\n }\n\n let descDiv\n if (index) {\n const sl = kb.statementsMatching(\n null,\n $rdf.sym('http://purl.org/ontology/olo/core#index')\n )\n const slots = []\n for (let i = 0; i < sl.length; i++) {\n if (sl[i]) {\n slots.push(parseInt(sl[i].object.value, 10))\n }\n }\n\n index = parseInt(index.value, 10)\n descDiv = myDocument.createElement('div')\n\n const pIndex =\n slots[(slots.indexOf(index) - 1 + slots.length) % slots.length]\n const nIndex =\n slots[(slots.indexOf(index) + 1 + slots.length) % slots.length]\n\n const prev = link(text('<<'), subject.uri.split('#')[0] + '#' + pIndex)\n\n descDiv.appendChild(prev)\n\n const indexDiv = myDocument.createElement('span')\n indexDiv.innerHTML = ' Playlist slot : ' + index + ' '\n\n descDiv.appendChild(indexDiv)\n\n const next = link(text('>>'), subject.uri.split('#')[0] + '#' + nIndex)\n descDiv.appendChild(next)\n }\n\n const tr = myDocument.createElement('TR') // why need tr?\n tr.appendChild(img)\n if (descDiv) {\n tr.appendChild(descDiv)\n }\n div.appendChild(tr)\n return div\n }\n}\n\n// ends\n"],"mappings":"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"}
File without changes
@@ -1 +1 @@
1
- {"version":3,"file":"editProfile.view.d.ts","sourceRoot":"","sources":["../../src/profile/editProfile.view.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAQ9C,QAAA,MAAM,eAAe,EAAE,cA2HtB,CAAA;AAED,eAAe,eAAe,CAAA"}
1
+ {"version":3,"file":"editProfile.view.d.ts","sourceRoot":"","sources":["../../src/profile/editProfile.view.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAQ9C,QAAA,MAAM,eAAe,EAAE,cA+ItB,CAAA;AAED,eAAe,eAAe,CAAA"}
@@ -4,13 +4,9 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports["default"] = void 0;
7
-
8
7
  var _rdflib = require("rdflib");
9
-
10
8
  var _solidUi = require("solid-ui");
11
-
12
9
  var _profile = require("./profile.dom");
13
-
14
10
  /**
15
11
  * Profile Editing App Pane
16
12
  *
@@ -20,7 +16,6 @@ var _profile = require("./profile.dom");
20
16
  * Usage: paneRegistry.register('profile/profilePane')
21
17
  * or standalone script adding onto existing mashlib.
22
18
  */
23
-
24
19
  /* babel-plugin-inline-import './profileFormText.ttl' */
25
20
  var profileFormText = "# 20210404a\n@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.\n@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>.\n@prefix foaf: <http://xmlns.com/foaf/0.1/>.\n@prefix owl: <http://www.w3.org/2002/07/owl#>.\n@prefix solid: <http://www.w3.org/ns/solid/terms#>.\n@prefix ui: <http://www.w3.org/ns/ui#>.\n@prefix schema: <http://schema.org/>.\n@prefix vcard: <http://www.w3.org/2006/vcard/ns#>.\n\n@prefix org: <http://www.w3.org/ns/org#>.\n@prefix esco: <http://data.europa.eu/esco/model#>.\n@prefix wd: <http://www.wikidata.org/entity/>.\n@prefix wdt: <http://www.wikidata.org/prop/direct/>.\n\n@prefix : <#>.\n\n:this\n <http://purl.org/dc/elements/1.1/title> \"Profile form\" ;\n a ui:Form ;\n # ui:part :backgroundColor, :highlightColor;\n ui:parts (\n :styleGroup\n :nicknameField\n :pronounsForm\n :LanguagesPrompt :LanguagesForm\n :CVGroup\n :SkillsPrompt :SkillsForm\n ).\n\n:styleGroup a ui:Group; ui:weight 0; ui:parts ( :styleHeading :backgroundColor :highlightColor ).\n :styleHeading a ui:Heading; ui:contents \"The style of your public profile.\".\n :backgroundColor a ui:ColorField; ui:property solid:profileBackgroundColor;\n ui:label \"Background color\"; ui:default \"#ffffff\".\n :highlightColor a ui:ColorField; ui:property solid:profileHighlightColor;\n ui:label \"Highlight color\"; ui:default \"#000000\".\n\n# Nickname\n\n:nicknameField a ui:SingleLineTextField; ui:size 12; ui:property foaf:nick;\n ui:label \"Short name for chats, etc.\"@en, \"nom court\"@fr.\n\n # Pronouns\n\n :pronounsForm a ui:Group; ui:weight 0; ui:parts ( :pronounsPrompt :subjectPronounForm :objectPronounForm :relativePronounForm) .\n\n :pronounsPrompt a ui:Comment; ui:contents \"What are your pronouns?\" .\n\n :subjectPronounForm a ui:SingleLineTextField; ui:property solid:preferredSubjectPronoun;\n ui:size 10; ui:label \"he/she/they...\" .\n :objectPronounForm a ui:SingleLineTextField; ui:property solid:preferredObjectPronoun;\n ui:size 10; ui:label \"him/her/them...\" .\n :relativePronounForm a ui:SingleLineTextField; ui:property solid:preferredRelativePronoun;\n ui:size 10; ui:label \"his/hers/theirs...\" .\n\n # Curriculum Vitae: membership of organizations\n\n :CVHeading a ui:Heading; ui:contents \"Public Curriculum Vitae\".\n :CVPrompt a ui:Comment; ui:contents \"What organizations have you been involved with?\" .\n\n :CVGroup a ui:Group; ui:weight 1; ui:parts ( :CVHeading :CVPrompt :involvementWithOrganizationsForm ).\n\n\n solid:Role a rdfs:Class; owl:oneOf ( solid:CurrentRole solid:FormerRole solid:FutureRole ). # Future Role too?\n\n org:member owl:inverse [ ui:label \"involvement with company, org etc\" ]. # timelimited involvement\n\n :involvementWithOrganizationsForm a ui:Multiple;\n ui:label \"Involvement with Organization\";\n ui:property org:member; ui:reverse true; # link back from role to member\n ui:ordered false; # Allow user to order CV secions rather than force date order? No.\n ui:part :RoleMembershipForm.\n\n# This is a big important form for one of a series of roles in the list.\n\n :RoleMembershipForm a ui:Group; ui:weight 3; ui:parts ( :MembershipFormHeading :roleNameField\n :escoOccupationField :orgField :RoleClassifier :RoleDatesForm :RoleDescriptionForm).\n\n :MembershipFormHeading a ui:Heading; ui:contents \"Details of this role\"@en, \"D\xE9tailes de ce r\xF4le\"@fr .\n\n :orgField a ui:Choice; ui:label \"Organization\"@en, \"Organization\"@fr;\n ui:canMintNew true; ui:use :OrganizationCreationForm ;\n ui:property org:organization;\n ui:from vcard:Organization .\n :roleNameField a ui:SingleLineTextField; ui:property vcard:role; ui:size 60 .\n\n :escoOccupationField a ui:AutocompleteField;\n ui:label \"occupation\"; ui:size 60;\n ui:property org:role;\n ui:dataSource :ESCO_Occupation_DataSource;\n ui:targetClass schema:Occupation .\n\n :ESCO_Occupation_DataSource a ui:DataSource;\n schema:name \"ESCO\";\n ui:targetClass schema:Occupation ;\n schema:logo <https://ec.europa.eu/esco/portal/static_resource2/images/logo/logo_en.gif>;\n ui:searchByNameURI \"https://ec.europa.eu/esco/api/search?language=$(language)&type=occupation&text=$(name)\".\n\n :instituteIdentityField a ui:AutocompleteField; ui:label \"in wikidata\";\n ui:size 60;\n ui:property solid:publicId; ui:dataSource :WikidataOnOrganizations.\n\n :WikidataOnOrganizations a ui:DataSource ;\n schema:name \"Wikidata\";\n ui:endpoint \"https://query.wikidata.org/sparql\" ;\n ui:targetClass <http://www.wikidata.org/entity/Q43229>; # Use if nothing else\n ui:searchByNameQuery \"\"\"SELECT ?subject ?name\n WHERE {\n ?klass wdt:P279* $(targetClass) .\n ?subject wdt:P31 ?klass .\n ?subject rdfs:label ?name.\n FILTER regex(?name, \"$(name)\", \"i\")\n } LIMIT $(limit) \"\"\" .\n\n :WikidataOnOrganizations ui:classMap\n [ ui:internalClass schema:Corporation; ui:externalClass <http://www.wikidata.org/entity/Q6881511>], #Enterprise is for-profit\n [ ui:internalClass schema:EducationalOrganization; ui:externalClass <http://www.wikidata.org/entity/Q178706>], #insitution\n [ ui:internalClass schema:ResearchOrganization; ui:externalClass <http://www.wikidata.org/entity/Q31855>], # reearch insitutie\n [ ui:internalClass schema:GovernmentOrganization; ui:externalClass <http://www.wikidata.org/entity/Q327333>], #government agency\n [ ui:internalClass schema:MedicalOrganization; ui:externalClass <http://www.wikidata.org/entity/Q4287745>],\n [ ui:internalClass schema:MusicGroup; ui:externalClass <http://www.wikidata.org/entity/Q32178211>], #music organization\n [ ui:internalClass schema:NGO; ui:externalClass <http://www.wikidata.org/entity/Q163740>], #nonprofit organization @@\n [ ui:internalClass schema:Occupation; ui:externalClass <http://www.wikidata.org/entity/Q28640>], # superclass: Profession\n [ ui:internalClass schema:Organization; ui:externalClass <http://www.wikidata.org/entity/Q43229>], # Superclass; Organization\n [ ui:internalClass schema:Project; ui:externalClass <http://www.wikidata.org/entity/Q170584>],\n [ ui:internalClass schema:SportsOrganization; ui:externalClass <http://www.wikidata.org/entity/Q4438121>] .\n\n\n# eposodes in one's career - Roles\n\nsolid:Role owl:disjointUnionOf ( solid:PastRole solid:CurrentRole solid:FutureRole ) .\nsolid:PastRole a rdfs:Class; rdfs:label \"former role\"@en, \"ancien r\xF4le\"@fr, \"vergangene Rolle\"@de, \"rol anterior\"@es .\nsolid:CurrentRole a rdfs:Class; rdfs:label \"current role\"@en, \"r\xF4le actuel\"@fr, \"momentane Rolle\"@de , \"rol actual\"@es .\nsolid:FutureRole a rdfs:Class; rdfs:label \"future role\"@en, \"r\xF4le \xE0 venir\"@fr, \"zuk\xFCnftige Rolle\"@de, \"rol futuro\"@es .\n\n:RoleDatesGroup a ui:Group; ui:weight 0; ui:parts ( :RoleClassifier :RoleDatesForm ) .\n :RoleClassifier a ui:Classifier; ui:label \"What sort of role?\"@en;\n ui:category solid:Role .\n\n :RoleDatesForm a ui:Options; ui:dependingOn rdf:type; ui:case\n [ ui:for solid:PastRole; ui:use :TwoDateForm ],\n [ ui:for solid:CurrentRole; ui:use :StartDateForm ],\n [ ui:for solid:FutureRole; ui:use :StartDateForm ].\n\n :StartDateForm a ui:DateField; ui:label \"start\"@en,\"d\xE9but\"@fr;\n ui:property schema:startDate .\n :TwoDateForm a ui:Group; ui:weight 0; ui:parts ( :StartDateForm :EndDateForm ) .\n :EndDateForm a ui:DateField; ui:label \"end\"@en,\"fin\"@fr;\n ui:property schema:endDate .\n\n:RoleDescriptionForm a ui:MultiLineTextField; ui:property schema:description;\n ui:label \"Describe your role\" .\n\n# Organizations\n\n vcard:Organization ui:creationForm :OrganizationCreationForm .\n\n# Ontology data to drive the classifier\n\nsolid:InterestingOrganization owl:disjointUnionOf (\n# Airline - a Corporation\n# Consortium - a Corporation or a NGO\n schema:Corporation\n schema:EducationalOrganization\n schema:ResearchOrganization # Proposed. https://github.com/schemaorg/schemaorg/issues/2877\n# FundingScheme - eh?\n schema:GovernmentOrganization\n# LibrarySystem\n# LocalBusiness - Corporation\n# MedicalOrganization - a Corporation or a NGO\n schema:NGO\n # NewsMediaOrganization - a Corporation or a NGO\nschema:PerformingGroup # a band\nschema:Project # like Solid\nschema:SportsOrganization # a Team\nsolid:OtherOrganization\n ) .\n\n# This until the schema.org ontology adopts it\nschema:ResearchOrganization a rdfs:Class; rdfs:label \"Research Organization\"@en, \"Organization de Recherche\"@fr ,\n \"organizaci\xF3n de investigaci\xF3n\"@es, \"\u0645\u0646\u0638\u0645\u0629 \u0627\u0644\u0628\u062D\u062B\"@ar, \"\u0905\u0928\u0941\u0938\u0902\u0927\u093E\u0928 \u0938\u0902\u0917\u0920\u0928\"@hi, \"Forschungsorganisation\"@de, \"shirika la utafiti\"@sw .\n\n :OrganizationCreationForm a ui:Form; schema:name \"Form for editing an organization using public data\" ;\n ui:parts ( :OrgClassifier :OrgSwitch :OrganizationNameField :homePageURIField ) .\n\n\n :OrgClassifier a ui:Classifier; ui:label \"What sort of organization?\"@en;\n ui:category solid:InterestingOrganization .\n\n :OrganizationNameField\n a ui:SingleLineTextField ;\n ui:label \"Organization Name\";\n ui:maxLength \"200\" ;\n ui:property schema:name ;\n ui:size 80 .\n\n :homePageURIField a ui:NamedNodeURIField; ui:size 80;\n ui:label \"Home page URI\"@en;\n ui:property schema:uri . # @@ ??\n\n :initituteTypeField a ui:Classifier;\n ui:label \"What sort of organization\";\n ui:category solid:InterestingOrganization .\n\n# Depending on the type of org, chose a different form\n\n :OrgSwitch a ui:Options; ui:dependingOn rdf:type;\n ui:case\n [ ui:for schema:Corporation; ui:use :CorporationForm ],\n [ ui:for schema:GovernmentOrganization; ui:use :GovernmentOrganizationForm ],\n [ ui:for schema:PerformingGroup; ui:use :PerformingGroupForm ],\n [ ui:for schema:Project; ui:use :ProjectForm ],\n [ ui:for schema:NGO; ui:use :NGOForm ],\n [ ui:for schema:EducationalOrganization; ui:use :EducationalOrganizationForm ],\n [ ui:for schema:ResearchOrganization; ui:use :ResearchOrganizationForm ],\n [ ui:for :SportsOrganization; ui:use :SportsOrganizationForm ],\n [ ui:for solid:OtherOrganization; ui:use :OtherOrganizationForm ].\n\n\n :CorporationForm a ui:Group; ui:weight 0; ui:parts ( :CorporationPrompt :CorporationAutocomplete ) .\n\n :CorporationPrompt a ui:Comment; ui:contents \"Which corporation?\".\n\n :CorporationAutocomplete a ui:AutocompleteField;\n a ui:AutocompleteField; ui:label \"Corporation in wikidata\";\n ui:size 60;\n ui:targetClass <http://www.wikidata.org/entity/Q6881511>; # Enterprise\n ui:property solid:publicId; ui:dataSource :WikidataInstancesByName.\n\n :WikidataInstancesByName a ui:DataSource ;\n schema:name \"Wikidata instances by name\";\n ui:endpoint \"https://query.wikidata.org/sparql\" ;\n ui:searchByNameQuery \"\"\"SELECT ?subject ?name\n WHERE {\n ?klass wdt:P279* $(targetClass) .\n ?subject wdt:P31 ?klass .\n ?subject rdfs:label ?name.\n FILTER regex(?name, \"$(name)\", \"i\")\n } LIMIT $(limit) \"\"\" ;\n\n # Note this form of the query is very experimental\n ui:searchByName [ ui:construct { ?subject schema:name ?name } ;\n ui:where { ?klass wdt:P279 ?targetClass .\n ?subject wdt:P31 ?klass; rdfs:label ?name .\n };\n ].\n\n :GovernmentOrganizationForm a ui:Group; ui:weight 0; ui:parts ( :GovernmentOrganizationPrompt :GovernmentOrganizationAutocomplete ) .\n\n :GovernmentOrganizationPrompt a ui:Comment; ui:contents \"Which GovernmentOrganization?\".\n\n :GovernmentOrganizationAutocomplete\n a ui:AutocompleteField; ui:label \"GovernmentOrganization in wikidata\";\n ui:size 60;\n ui:targetClass <http://www.wikidata.org/entity/Q327333>; # GovernmentOrganization\n ui:property solid:publicId; ui:dataSource :WikidataInstancesByName.\n\n :EducationalOrganizationForm a ui:Group; ui:weight 1; ui:parts ( :EducationalOrganizationPrompt :EducationalOrganizationAutocomplete ) .\n\n :EducationalOrganizationPrompt a ui:Comment; ui:contents \"Which Educational Organization?\".\n\n :EducationalOrganizationAutocomplete\n a ui:AutocompleteField; ui:label \"Educational Organization in wikidata\";\n ui:size 60;\n ui:targetClass <http://www.wikidata.org/entity/Q2385804>; # EducationalOrganization\n ui:property solid:publicId; ui:dataSource :WikidataInstancesByName.\n\n\n :ResearchOrganizationForm a ui:Group; ui:weight 0; ui:parts ( :ResearchOrganizationPrompt :ResearchOrganizationAutocomplete ) .\n\n :ResearchOrganizationPrompt a ui:Comment; ui:contents \"Which Research Organization?\".\n\n :ResearchOrganizationAutocomplete\n a ui:AutocompleteField; ui:label \"Research Insitute in wikidata\";\n ui:size 60;\n ui:targetClass <http://www.wikidata.org/entity/Q31855>; # research institute\n ui:property solid:publicId; ui:dataSource :WikidataInstancesByName.\n\n\n :NGOForm a ui:Group; ui:weight 0; ui:parts ( :NGOPrompt :NGOAutocomplete ) .\n\n :NGOPrompt a ui:Comment; ui:contents \"Which NGO?\".\n\n :NGOAutocomplete\n a ui:AutocompleteField; ui:label \"NGO in wikidata\";\n ui:size 60;\n ui:targetClass <http://www.wikidata.org/entity/Q163740>; # Non-profit org\n ui:property solid:publicId; ui:dataSource :WikidataInstancesByName.\n\n :PerformingGroupForm a ui:Group; ui:weight 0; ui:parts ( :PerformingGroupPrompt :PerformingGroupAutocomplete ) .\n\n :PerformingGroupPrompt a ui:Comment; ui:contents \"Which PerformingGroup?\".\n\n :PerformingGroupAutocomplete\n a ui:AutocompleteField; ui:label \"PerformingGroup in wikidata\";\n ui:size 60;\n ui:targetClass <http://www.wikidata.org/entity/Q32178211>; # Music Org\n ui:property solid:publicId; ui:dataSource :WikidataInstancesByName.\n\n\n :ProjectForm a ui:Group; ui:weight 0; ui:parts ( :ProjectPrompt :ProjectAutocomplete ) . # :ProjectAutocomplete - no: supress, as not in WD\n\n :ProjectPrompt a ui:Comment; ui:contents \"Which Project?\".\n\n :ProjectAutocomplete\n a ui:AutocompleteField; ui:label \"Project in wikidata\";\n ui:size 60;\n ui:targetClass <http://www.wikidata.org/entity/Q170584>; # Project\n ui:property solid:publicId; ui:dataSource :WikidataInstancesByName.\n\n :SportsOrganizationForm a ui:Group; ui:weight 0; ui:parts ( :SportsOrganizationPrompt :SportsOrganizationAutocomplete ) .\n\n :SportsOrganizationPrompt a ui:Comment; ui:contents \"Which Sports Organization?\".\n\n :SportsOrganizationAutocomplete\n a ui:AutocompleteField; ui:label \"SportsOrganization in wikidata\";\n ui:size 60;\n ui:targetClass <http://www.wikidata.org/entity/Q4438121>; # SportsOrganization\n ui:property solid:publicId; ui:dataSource :WikidataInstancesByName.\n\n :OtherOrganizationForm a ui:Group; ui:weight 0; ui:parts ( :OrganizationNameField :homePageURIField ) .\n\n #################### Skills\n\n :SkillsPrompt a ui:Comment; ui:contents \"Skills?\" .\n\n :SkillsForm a ui:Multiple;\n ui:label \"Skills\";\n ui:property schema:skills;\n ui:ordered false; # Allow reader to order skills\n ui:part :SkillForm.\n\n :SkillForm a ui:Group; ui:weight 1; ui:parts ( :escoSkillField ).\n\n # :skillNameField a ui:SingleLineTextField; ui:property vcard:role; ui:size 30 .\n\n :escoSkillField a ui:AutocompleteField;\n ui:label \"skill\"; ui:size 30;\n ui:property solid:publicId;\n ui:dataSource :ESCO_Skill_DataSource;\n ui:targetClass schema:Skill .\n\n :ESCO_Skill_DataSource a ui:DataSource;\n schema:name \"ESCO Skill\";\n ui:targetClass esco:Skill ;\n schema:logo <https://ec.europa.eu/esco/portal/static_resource2/images/logo/logo_en.gif>;\n ui:searchByNameURI \"https://ec.europa.eu/esco/api/search?language=$(language)&limit=$(limit)&type=skill&text=$(name)\".\n\n# Language\n\n:LanguagesPrompt a ui:Comment; ui:contents \"Languages?\" .\n\n:LanguagesForm a ui:Multiple;\n ui:label \"Languages\";\n ui:property schema:knowsLanguage; # @@@\n ui:ordered true; # Allow user to order languages most important first.\n ui:part :LanguageForm.\n\n:LanguageForm a ui:Group; ui:weight 1; ui:parts ( :WikidataLanguageField ).\n\n :WikidataLanguageField a ui:AutocompleteField;\n ui:label \"Language\"; ui:size 30;\n ui:property solid:publicId; # @@\n ui:dataSource :WikidataLanguageDataSource;\n ui:targetClass schema:Language .\n\n :WikidataLanguageDataSource\n schema:name \"Wikidata languages\";\n ui:endpoint \"https://query.wikidata.org/sparql\" ;\n ui:objectURIBase <https://www.w3.org/ns/iana/language-code/>;\n # Add this to any literal string returned as ?subject\n\n ui:searchByNameQuery \"\"\"SELECT ?item ?subject ?name\nWHERE\n{ ?item wdt:P305 ?subject .\n OPTIONAL {?item rdfs:label ?name}\n OPTIONAL {?item wdt:P1705 ?name}\n FILTER regex(?name, \"$(name)\", \"i\")\n FILTER regex(?subject, \"^..$\", \"i\")\n}\"\"\" .\n # Note we restrict code to two-letter codes with the second regex, so as to limit the deluge of languages\n # Hope there are not any important ones which have three-letter codes.\n # Omitted: SERVICE wikibase:label { bd:serviceParam wikibase:language \"$(languages)\". }\n\n\n# ENDS\n";
26
21
  var highlightColor = _solidUi.style.highlightColor || '#7C4DFF';
@@ -34,16 +29,13 @@ var editProfileView = {
34
29
  render: function render(subject, context) {
35
30
  var dom = context.dom;
36
31
  var store = context.session.store;
37
-
38
32
  function complainIfBad(ok, mess) {
39
33
  if (ok) return;
40
34
  div.appendChild(_solidUi.widgets.errorMessageBlock(dom, mess, '#fee'));
41
35
  }
42
-
43
36
  function renderProfileForm(div, subject) {
44
37
  var preferencesForm = (0, _rdflib.sym)('https://solidos.github.io/solid-panes/dashboard/profileStyle.ttl#this');
45
38
  var preferencesFormDoc = preferencesForm.doc();
46
-
47
39
  if (!store.holds(undefined, undefined, undefined, preferencesFormDoc)) {
48
40
  // If not loaded already
49
41
  (0, _rdflib.parse)(profileFormText, store, preferencesFormDoc.uri, 'text/turtle', function () {
@@ -54,47 +46,40 @@ var editProfileView = {
54
46
  _solidUi.widgets.appendForm(dom, div, {}, subject, preferencesForm, editableProfile, complainIfBad);
55
47
  } // renderProfileForm
56
48
 
57
-
58
49
  var div = dom.createElement('div');
59
50
  var editableProfile;
60
51
  div.setAttribute('style', "border: 0.3em solid ".concat(highlightColor, "; border-radius: 0.5em; padding: 0.7em; margin-top:0.7em;"));
61
- var table = div.appendChild(dom.createElement('table')); // const top = table.appendChild(dom.createElement('tr'))
62
-
52
+ var table = div.appendChild(dom.createElement('table'));
53
+ // const top = table.appendChild(dom.createElement('tr'))
63
54
  var main = table.appendChild(dom.createElement('tr'));
64
55
  var bottom = table.appendChild(dom.createElement('tr'));
65
56
  var statusArea = bottom.appendChild(dom.createElement('div'));
66
57
  statusArea.setAttribute('style', 'padding: 0.7em;');
67
-
68
58
  function comment(str) {
69
59
  var p = main.appendChild(dom.createElement('p'));
70
60
  p.setAttribute('style', 'padding: 1em;');
71
61
  p.textContent = str;
72
62
  return p;
73
63
  }
74
-
75
64
  function heading(str) {
76
65
  var h = main.appendChild(dom.createElement('h3'));
77
66
  h.setAttribute('style', 'color:' + highlightColor + ';');
78
67
  h.textContent = str;
79
68
  return h;
80
69
  }
81
-
82
70
  var profileContext = {
83
71
  dom: dom,
84
72
  div: main,
85
73
  statusArea: statusArea,
86
74
  me: null
87
75
  };
88
-
89
76
  _solidUi.login.ensureLoadedProfile(profileContext).then(function (theContext) {
90
77
  var me = theContext.me;
91
78
  heading('Edit your public profile');
92
79
  var profile = me.doc();
93
-
94
80
  if (!store.updater) {
95
81
  throw new Error('Store has no updater');
96
82
  }
97
-
98
83
  if (store.any(me, _solidUi.ns.solid('editableProfile'))) {
99
84
  editableProfile = store.any(me, _solidUi.ns.solid('editableProfile'));
100
85
  } else if (store.updater.editable(profile.uri, store)) {
@@ -103,33 +88,47 @@ var editProfileView = {
103
88
  statusArea.appendChild(_solidUi.widgets.errorMessageBlock(dom, "\u26A0\uFE0F Your profile ".concat(profile, " is not editable, so we cannot do much here."), 'straw'));
104
89
  return;
105
90
  }
106
-
107
91
  comment("Everything you put here will be public.\n There will be other places to record private things.");
108
92
  heading('Your contact information');
109
93
  main.appendChild((0, _profile.paneDiv)(context, me, 'contact'));
110
94
  heading('People you know who have WebIDs');
111
- comment("This is your public social network.\n Only put people here to whom you are happy to be publicly connected.\n (You can always keep private track of friends and family in your contacts.)"); // TODO: would be useful to explain what it means to "drag people"
95
+ comment("This is your public social network.\n Only put people here to whom you are happy to be publicly connected.\n (You can always keep private track of friends and family in your contacts.)");
96
+
97
+ // TODO: would be useful to explain what it means to "drag people"
112
98
  // what is it that is being dragged?
113
99
  // is there a way to search for people (or things to drag) on this page?
114
-
115
100
  if (editableProfile) {
116
101
  comment('Drag people onto the target below to add people.');
117
102
  }
118
-
119
103
  _solidUi.widgets.attachmentList(dom, me, main, {
120
104
  doc: profile,
121
105
  modify: !!editableProfile,
122
106
  predicate: _solidUi.ns.foaf('knows'),
123
107
  noun: 'friend'
124
- }); // heading('The style of your public profile') headings are in form now
108
+ });
109
+ heading('Communities you participate in');
110
+ comment("These are organizations and projects (etc) whose stuff you share");
125
111
 
112
+ // TODO: would be useful to explain what it means to "drag organizations"
113
+ // what is it that is being dragged?
114
+ // is there a way to search for people (or things to drag) on this page?
115
+ // Also provide a way of using cut and paste
116
+ if (editableProfile) {
117
+ comment('Drag organizations onto the target below to add organizations.');
118
+ }
119
+ _solidUi.widgets.attachmentList(dom, me, main, {
120
+ doc: profile,
121
+ modify: !!editableProfile,
122
+ predicate: _solidUi.ns.solid('community'),
123
+ noun: 'community'
124
+ });
126
125
 
126
+ // heading('The style of your public profile') headings are in form now
127
127
  renderProfileForm(main, me);
128
128
  heading('Thank you for filling your profile.');
129
129
  })["catch"](function (error) {
130
130
  statusArea.appendChild(_solidUi.widgets.errorMessageBlock(dom, error, '#fee'));
131
131
  });
132
-
133
132
  return div;
134
133
  }
135
134
  };