solid-panes 4.4.2-1 → 4.4.2-3
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.
- package/README.md +10 -10
- package/dist/RDFXMLPane.d.ts +2 -3
- package/dist/RDFXMLPane2.cjs.js +3 -0
- package/dist/RDFXMLPane2.cjs.js.map +1 -0
- package/dist/RDFXMLPane2.esm.js +55 -0
- package/dist/RDFXMLPane2.esm.js.map +1 -0
- package/dist/_virtual/_rolldown/runtime.cjs.js +1 -0
- package/dist/_virtual/~icons/lucide/user.cjs.js +2 -0
- package/dist/_virtual/~icons/lucide/user.cjs.js.map +1 -0
- package/dist/_virtual/~icons/lucide/user.esm.js +11 -0
- package/dist/_virtual/~icons/lucide/user.esm.js.map +1 -0
- package/dist/audio/audioPane.cjs.js +2 -0
- package/dist/audio/audioPane.cjs.js.map +1 -0
- package/dist/audio/audioPane.esm.js +96 -0
- package/dist/audio/audioPane.esm.js.map +1 -0
- package/dist/classInstancePane.cjs.js +2 -0
- package/dist/classInstancePane.cjs.js.map +1 -0
- package/dist/classInstancePane.esm.js +50 -0
- package/dist/classInstancePane.esm.js.map +1 -0
- package/dist/components/header/Header.d.ts +8 -0
- package/dist/components/header/Header.d.ts.map +1 -0
- package/dist/components/header/index.d.ts +4 -0
- package/dist/components/header/index.d.ts.map +1 -0
- package/dist/dashboard/basicPreferences.cjs.js +2 -0
- package/dist/dashboard/basicPreferences.cjs.js.map +1 -0
- package/dist/dashboard/basicPreferences.d.ts +1 -1
- package/dist/dashboard/basicPreferences.esm.js +70 -0
- package/dist/dashboard/basicPreferences.esm.js.map +1 -0
- package/dist/dashboard/dashboardPane.d.ts +1 -1
- package/dist/dashboard/homepage.d.ts +1 -1
- package/dist/dashboard/ontologyData.cjs.js +37 -0
- package/dist/dashboard/ontologyData.cjs.js.map +1 -0
- package/dist/dashboard/ontologyData.esm.js +6 -0
- package/dist/dashboard/ontologyData.esm.js.map +1 -0
- package/dist/dashboard/preferencesFormText.cjs.js +20 -0
- package/dist/dashboard/preferencesFormText.cjs.js.map +1 -0
- package/dist/dashboard/preferencesFormText.esm.js +6 -0
- package/dist/dashboard/preferencesFormText.esm.js.map +1 -0
- package/dist/dataContentPane.d.ts +2 -3
- package/dist/dataContentPane2.cjs.js +2 -0
- package/dist/dataContentPane2.cjs.js.map +1 -0
- package/dist/dataContentPane2.esm.js +109 -0
- package/dist/dataContentPane2.esm.js.map +1 -0
- package/dist/defaultPane.d.ts +2 -3
- package/dist/defaultPane2.cjs.js +2 -0
- package/dist/defaultPane2.cjs.js.map +1 -0
- package/dist/defaultPane2.esm.js +41 -0
- package/dist/defaultPane2.esm.js.map +1 -0
- package/dist/dev.d.ts +10 -0
- package/dist/dev.d.ts.map +1 -0
- package/dist/dokieli/dokieliPane.cjs.js +2 -0
- package/dist/dokieli/dokieliPane.cjs.js.map +1 -0
- package/dist/dokieli/dokieliPane.esm.js +39 -0
- package/dist/dokieli/dokieliPane.esm.js.map +1 -0
- package/dist/dokieli/{new.js → new.cjs.js} +4 -10
- package/dist/dokieli/new.cjs.js.map +1 -0
- package/dist/dokieli/new.esm.js +6 -0
- package/dist/dokieli/new.esm.js.map +1 -0
- package/dist/form/pane.cjs.js +4 -0
- package/dist/form/pane.cjs.js.map +1 -0
- package/dist/form/pane.d.ts +1 -2
- package/dist/form/pane.esm.js +121 -0
- package/dist/form/pane.esm.js.map +1 -0
- package/dist/home/homePane.cjs.js +2 -0
- package/dist/home/homePane.cjs.js.map +1 -0
- package/dist/home/homePane.d.ts +1 -1
- package/dist/home/homePane.esm.js +35 -0
- package/dist/home/homePane.esm.js.map +1 -0
- package/dist/humanReadablePane.d.ts +2 -3
- package/dist/humanReadablePane2.cjs.js +2 -0
- package/dist/humanReadablePane2.cjs.js.map +1 -0
- package/dist/humanReadablePane2.esm.js +123 -0
- package/dist/humanReadablePane2.esm.js.map +1 -0
- package/dist/icons/dashboard.cjs.js +2 -0
- package/dist/icons/dashboard.cjs.js.map +1 -0
- package/dist/icons/dashboard.esm.js +6 -0
- package/dist/icons/dashboard.esm.js.map +1 -0
- package/dist/icons/folder.cjs.js +2 -0
- package/dist/icons/folder.cjs.js.map +1 -0
- package/dist/icons/folder.esm.js +6 -0
- package/dist/icons/folder.esm.js.map +1 -0
- package/dist/icons/friends.cjs.js +2 -0
- package/dist/icons/friends.cjs.js.map +1 -0
- package/dist/icons/friends.esm.js +6 -0
- package/dist/icons/friends.esm.js.map +1 -0
- package/dist/icons/iconHelper.cjs.js +2 -0
- package/dist/icons/iconHelper.cjs.js.map +1 -0
- package/dist/icons/iconHelper.esm.js +17 -0
- package/dist/icons/iconHelper.esm.js.map +1 -0
- package/dist/icons/{menu.svg → menu.cjs.js} +3 -2
- package/dist/icons/menu.cjs.js.map +1 -0
- package/dist/icons/menu.esm.js +6 -0
- package/dist/icons/menu.esm.js.map +1 -0
- package/dist/icons/person.cjs.js +2 -0
- package/dist/icons/person.cjs.js.map +1 -0
- package/dist/icons/person.esm.js +6 -0
- package/dist/icons/person.esm.js.map +1 -0
- package/dist/imagePane.d.ts +2 -3
- package/dist/imagePane2.cjs.js +2 -0
- package/dist/imagePane2.cjs.js.map +1 -0
- package/dist/imagePane2.esm.js +32 -0
- package/dist/imagePane2.esm.js.map +1 -0
- package/dist/index.cjs.js +2 -0
- package/dist/index.cjs.js.map +1 -0
- package/dist/index.d.ts +4 -4
- package/dist/index.esm.js +26 -0
- package/dist/index.esm.js.map +1 -0
- package/dist/internal/internalPane.d.ts +1 -2
- package/dist/internal/internalPane2.cjs.js +2 -0
- package/dist/internal/internalPane2.cjs.js.map +1 -0
- package/dist/internal/internalPane2.esm.js +104 -0
- package/dist/internal/internalPane2.esm.js.map +1 -0
- package/dist/mainPage/footer.cjs.js +2 -0
- package/dist/mainPage/footer.cjs.js.map +1 -0
- package/dist/mainPage/footer.d.ts +1 -3
- package/dist/mainPage/footer.esm.js +18 -0
- package/dist/mainPage/footer.esm.js.map +1 -0
- package/dist/mainPage/header.cjs.js +2 -0
- package/dist/mainPage/header.cjs.js.map +1 -0
- package/dist/mainPage/header.d.ts +1 -15
- package/dist/mainPage/header.d.ts.map +1 -1
- package/dist/mainPage/header.esm.js +24 -0
- package/dist/mainPage/header.esm.js.map +1 -0
- package/dist/mainPage/index.cjs.js +2 -0
- package/dist/mainPage/index.cjs.js.map +1 -0
- package/dist/mainPage/index.d.ts +3 -7
- package/dist/mainPage/index.d.ts.map +1 -1
- package/dist/mainPage/index.esm.js +38 -0
- package/dist/mainPage/index.esm.js.map +1 -0
- package/dist/mainPage/menu.d.ts +1 -2
- package/dist/mainPage/menu2.cjs.js +2 -0
- package/dist/mainPage/menu2.cjs.js.map +1 -0
- package/dist/mainPage/menu2.esm.js +184 -0
- package/dist/mainPage/menu2.esm.js.map +1 -0
- package/dist/n3Pane.d.ts +2 -3
- package/dist/n3Pane2.cjs.js +3 -0
- package/dist/n3Pane2.cjs.js.map +1 -0
- package/dist/n3Pane2.esm.js +52 -0
- package/dist/n3Pane2.esm.js.map +1 -0
- package/dist/outline/context.cjs.js +2 -0
- package/dist/outline/context.cjs.js.map +1 -0
- package/dist/outline/context.d.ts +3 -3
- package/dist/outline/context.esm.js +18 -0
- package/dist/outline/context.esm.js.map +1 -0
- package/dist/outline/manager2.cjs.js +3 -0
- package/dist/outline/manager2.cjs.js.map +1 -0
- package/dist/outline/manager2.esm.js +875 -0
- package/dist/outline/manager2.esm.js.map +1 -0
- package/dist/outline/outlineIcons.cjs.js +2 -0
- package/dist/outline/outlineIcons.cjs.js.map +1 -0
- package/dist/outline/outlineIcons.esm.js +10 -0
- package/dist/outline/outlineIcons.esm.js.map +1 -0
- package/dist/outline/propertyViews.cjs.js +2 -0
- package/dist/outline/propertyViews.cjs.js.map +1 -0
- package/dist/outline/propertyViews.esm.js +19 -0
- package/dist/outline/propertyViews.esm.js.map +1 -0
- package/dist/outline/queryByExample.cjs.js +2 -0
- package/dist/outline/queryByExample.cjs.js.map +1 -0
- package/dist/outline/queryByExample.esm.js +25 -0
- package/dist/outline/queryByExample.esm.js.map +1 -0
- package/dist/outline/userInput.cjs.js +61 -0
- package/dist/outline/userInput.cjs.js.map +1 -0
- package/dist/outline/userInput.esm.js +784 -0
- package/dist/outline/userInput.esm.js.map +1 -0
- package/dist/outline/viewAsImage.cjs.js +2 -0
- package/dist/outline/viewAsImage.cjs.js.map +1 -0
- package/dist/outline/viewAsImage.esm.js +10 -0
- package/dist/outline/viewAsImage.esm.js.map +1 -0
- package/dist/outline/viewAsMbox.cjs.js +2 -0
- package/dist/outline/viewAsMbox.cjs.js.map +1 -0
- package/dist/outline/viewAsMbox.esm.js +9 -0
- package/dist/outline/viewAsMbox.esm.js.map +1 -0
- package/dist/pad/padPane.d.ts +1 -2
- package/dist/pad/padPane2.cjs.js +2 -0
- package/dist/pad/padPane2.cjs.js.map +1 -0
- package/dist/pad/padPane2.esm.js +172 -0
- package/dist/pad/padPane2.esm.js.map +1 -0
- package/dist/playlist/playlistPane.cjs.js +2 -0
- package/dist/playlist/playlistPane.cjs.js.map +1 -0
- package/dist/playlist/playlistPane.esm.js +49 -0
- package/dist/playlist/playlistPane.esm.js.map +1 -0
- package/dist/profileUtils/ownerProfile.cjs.js +2 -0
- package/dist/profileUtils/ownerProfile.cjs.js.map +1 -0
- package/dist/profileUtils/ownerProfile.d.ts +1 -1
- package/dist/profileUtils/ownerProfile.esm.js +50 -0
- package/dist/profileUtils/ownerProfile.esm.js.map +1 -0
- package/dist/registerPanes.cjs.js +2 -0
- package/dist/registerPanes.cjs.js.map +1 -0
- package/dist/registerPanes.esm.js +45 -0
- package/dist/registerPanes.esm.js.map +1 -0
- package/dist/schedule/formsForSchedule.cjs.js +117 -0
- package/dist/schedule/formsForSchedule.cjs.js.map +1 -0
- package/dist/schedule/formsForSchedule.esm.js +6 -0
- package/dist/schedule/formsForSchedule.esm.js.map +1 -0
- package/dist/schedule/schedulePane.d.ts +2 -4
- package/dist/schedule/schedulePane2.cjs.js +8 -0
- package/dist/schedule/schedulePane2.cjs.js.map +1 -0
- package/dist/schedule/schedulePane2.esm.js +384 -0
- package/dist/schedule/schedulePane2.esm.js.map +1 -0
- package/dist/sharing/sharingPane.cjs.js +2 -0
- package/dist/sharing/sharingPane.cjs.js.map +1 -0
- package/dist/sharing/sharingPane.esm.js +22 -0
- package/dist/sharing/sharingPane.esm.js.map +1 -0
- package/dist/slideshow/slideshowPane.cjs.js +2 -0
- package/dist/slideshow/slideshowPane.cjs.js.map +1 -0
- package/dist/slideshow/slideshowPane.esm.js +46 -0
- package/dist/slideshow/slideshowPane.esm.js.map +1 -0
- package/dist/social/editProfileDetails.cjs.js +2 -0
- package/dist/social/editProfileDetails.cjs.js.map +1 -0
- package/dist/social/editProfileDetails.d.ts +1 -2
- package/dist/social/editProfileDetails.esm.js +10 -0
- package/dist/social/editProfileDetails.esm.js.map +1 -0
- package/dist/social/icons.cjs.js +82 -0
- package/dist/social/icons.cjs.js.map +1 -0
- package/dist/social/{icons.js → icons.esm.js} +12 -18
- package/dist/social/icons.esm.js.map +1 -0
- package/dist/social/socialPane.d.ts +2 -3
- package/dist/social/socialPane2.cjs.js +6 -0
- package/dist/social/socialPane2.cjs.js.map +1 -0
- package/dist/social/socialPane2.esm.js +326 -0
- package/dist/social/socialPane2.esm.js.map +1 -0
- package/dist/social/socialSections.cjs.js +2 -0
- package/dist/social/socialSections.cjs.js.map +1 -0
- package/dist/social/socialSections.d.ts +2 -2
- package/dist/social/socialSections.esm.js +221 -0
- package/dist/social/socialSections.esm.js.map +1 -0
- package/dist/social/triage.cjs.js +2 -0
- package/dist/social/triage.cjs.js.map +1 -0
- package/dist/social/triage.d.ts +2 -2
- package/dist/social/triage.esm.js +44 -0
- package/dist/social/triage.esm.js.map +1 -0
- package/dist/tabbed/tabbedPane.cjs.js +2 -0
- package/dist/tabbed/tabbedPane.cjs.js.map +1 -0
- package/dist/tabbed/tabbedPane.d.ts +1 -1
- package/dist/tabbed/tabbedPane.esm.js +38 -0
- package/dist/tabbed/tabbedPane.esm.js.map +1 -0
- package/dist/tableViewPane.cjs.js +2 -0
- package/dist/tableViewPane.cjs.js.map +1 -0
- package/dist/tableViewPane.esm.js +20 -0
- package/dist/tableViewPane.esm.js.map +1 -0
- package/dist/transaction/pane.cjs.js +8 -0
- package/dist/transaction/pane.cjs.js.map +1 -0
- package/dist/transaction/pane.esm.js +212 -0
- package/dist/transaction/pane.esm.js.map +1 -0
- package/dist/transaction/period.cjs.js +4 -0
- package/dist/transaction/period.cjs.js.map +1 -0
- package/dist/transaction/period.esm.js +126 -0
- package/dist/transaction/period.esm.js.map +1 -0
- package/dist/trip/tripPane.cjs.js +2 -0
- package/dist/trip/tripPane.cjs.js.map +1 -0
- package/dist/trip/tripPane.esm.js +85 -0
- package/dist/trip/tripPane.esm.js.map +1 -0
- package/dist/trustedApplications/trustedApplications.dom.cjs.js +2 -0
- package/dist/trustedApplications/trustedApplications.dom.cjs.js.map +1 -0
- package/dist/trustedApplications/trustedApplications.dom.d.ts +1 -1
- package/dist/trustedApplications/trustedApplications.dom.esm.js +108 -0
- package/dist/trustedApplications/trustedApplications.dom.esm.js.map +1 -0
- package/dist/trustedApplications/trustedApplications.utils.cjs.js +2 -0
- package/dist/trustedApplications/trustedApplications.utils.cjs.js.map +1 -0
- package/dist/trustedApplications/trustedApplications.utils.d.ts +1 -1
- package/dist/trustedApplications/trustedApplications.utils.esm.js +20 -0
- package/dist/trustedApplications/trustedApplications.utils.esm.js.map +1 -0
- package/dist/trustedApplications/trustedApplications.view.cjs.js +2 -0
- package/dist/trustedApplications/trustedApplications.view.cjs.js.map +1 -0
- package/dist/trustedApplications/trustedApplications.view.d.ts +1 -1
- package/dist/trustedApplications/trustedApplications.view.esm.js +41 -0
- package/dist/trustedApplications/trustedApplications.view.esm.js.map +1 -0
- package/dist/ui/pane.cjs.js +4 -0
- package/dist/ui/pane.cjs.js.map +1 -0
- package/dist/ui/pane.esm.js +56 -0
- package/dist/ui/pane.esm.js.map +1 -0
- package/dist/versionInfo.cjs.js +2 -0
- package/dist/versionInfo.cjs.js.map +1 -0
- package/dist/versionInfo.esm.js +40 -0
- package/dist/versionInfo.esm.js.map +1 -0
- package/dist/video/videoPane.cjs.js +2 -0
- package/dist/video/videoPane.cjs.js.map +1 -0
- package/dist/video/videoPane.esm.js +25 -0
- package/dist/video/videoPane.esm.js.map +1 -0
- package/package.json +50 -61
- package/dist/0314353e28ce6e5539af.svg +0 -9
- package/dist/04567ff683933c35c465.png +0 -0
- package/dist/10163fd9b5a0e00d63a0.png +0 -0
- package/dist/1234dcb2eec2e45f252b.png +0 -0
- package/dist/20899934157df4db56cb.png +0 -0
- package/dist/33760bf79f097f449da5.png +0 -0
- package/dist/4cceba29ab33b1ddd9bb.svg +0 -6
- package/dist/578d2b6ed32e7624164e.png +0 -0
- package/dist/5f62a5b2b7e99b9640c7.png +0 -0
- package/dist/6525766ecd288ec60129.png +0 -0
- package/dist/7800be6f6c4b5b0f4f20.png +0 -0
- package/dist/7b7538c6f6b317968009.svg +0 -9
- package/dist/92d03142abe6efc0b42d.svg +0 -6
- package/dist/976473cf5fe24d657d4b.png +0 -0
- package/dist/RDFXMLPane.css +0 -70
- package/dist/RDFXMLPane.js +0 -100
- package/dist/argument/argumentPane.js +0 -60
- package/dist/attach/attachPane.js +0 -393
- package/dist/audio/audioPane.js +0 -181
- package/dist/bda84f59e7216675a208.png +0 -0
- package/dist/cd68e8f3990ba8b2139e.png +0 -0
- package/dist/classInstancePane.js +0 -91
- package/dist/dashboard/basicPreferences.js +0 -147
- package/dist/dashboard/dashboardPane.js +0 -73
- package/dist/dashboard/homepage.js +0 -42
- package/dist/dataContentPane.css +0 -271
- package/dist/dataContentPane.js +0 -226
- package/dist/defaultPane.css +0 -97
- package/dist/defaultPane.js +0 -81
- package/dist/dokieli/dokieliPane.js +0 -74
- package/dist/e7074a7e2cb69e51cfd3.png +0 -0
- package/dist/f3772696fb7ee53c23d8.png +0 -0
- package/dist/form/formPane.css +0 -120
- package/dist/form/pane.js +0 -250
- package/dist/home/homePane.js +0 -74
- package/dist/humanReadablePane.css +0 -129
- package/dist/humanReadablePane.js +0 -243
- package/dist/icons/clock.svg +0 -7
- package/dist/icons/comment.svg +0 -6
- package/dist/icons/dashboard.svg +0 -9
- package/dist/icons/downArrow.svg +0 -6
- package/dist/icons/folder.svg +0 -6
- package/dist/icons/friends.svg +0 -9
- package/dist/icons/help.svg +0 -8
- package/dist/icons/iconHelper.js +0 -23
- package/dist/icons/person.svg +0 -6
- package/dist/icons/personInCircle.svg +0 -8
- package/dist/icons/sharing.svg +0 -10
- package/dist/icons/signOut.svg +0 -8
- package/dist/icons/signUp.svg +0 -9
- package/dist/icons/star.svg +0 -3
- package/dist/imagePane.css +0 -4
- package/dist/imagePane.js +0 -67
- package/dist/index.js +0 -123
- package/dist/internal/internalPane.css +0 -14
- package/dist/internal/internalPane.js +0 -183
- package/dist/mainPage/footer.js +0 -29
- package/dist/mainPage/header.js +0 -203
- package/dist/mainPage/index.js +0 -78
- package/dist/mainPage/menu.css +0 -243
- package/dist/mainPage/menu.js +0 -449
- package/dist/microblogPane/mbStyle.css +0 -267
- package/dist/microblogPane/microblogPane.js +0 -1031
- package/dist/n3Pane.css +0 -49
- package/dist/n3Pane.js +0 -88
- package/dist/outline/context.js +0 -21
- package/dist/outline/manager.css +0 -78
- package/dist/outline/manager.js +0 -2115
- package/dist/outline/outlineIcons.js +0 -126
- package/dist/outline/propertyViews.js +0 -43
- package/dist/outline/queryByExample.js +0 -285
- package/dist/outline/userInput.js +0 -1821
- package/dist/outline/viewAsImage.js +0 -14
- package/dist/outline/viewAsMbox.js +0 -21
- package/dist/pad/padPane.css +0 -40
- package/dist/pad/padPane.js +0 -421
- package/dist/playlist/playlistPane.js +0 -119
- package/dist/profileUtils/ownerProfile.js +0 -84
- package/dist/registerPanes.js +0 -145
- package/dist/schedule/schedulePane.css +0 -294
- package/dist/schedule/schedulePane.js +0 -1022
- package/dist/sharing/sharingPane.js +0 -48
- package/dist/slideshow/slideshowPane.js +0 -79
- package/dist/social/editProfileDetails.js +0 -362
- package/dist/social/socialPane.css +0 -1464
- package/dist/social/socialPane.js +0 -651
- package/dist/social/socialSections.js +0 -393
- package/dist/social/spinner.js +0 -13
- package/dist/social/triage.js +0 -79
- package/dist/solid-panes.js +0 -87502
- package/dist/solid-panes.js.map +0 -1
- package/dist/solid-panes.min.js +0 -3811
- package/dist/solid-panes.min.js.map +0 -1
- package/dist/styles/tabbedtab.css +0 -1066
- package/dist/styles/utilities.css +0 -5
- package/dist/tabbed/tabbedPane.js +0 -59
- package/dist/tableViewPane.js +0 -56
- package/dist/transaction/pane.js +0 -477
- package/dist/transaction/period.js +0 -323
- package/dist/trip/tripPane.js +0 -174
- package/dist/trustedApplications/trustedApplications.dom.js +0 -145
- package/dist/trustedApplications/trustedApplications.utils.js +0 -23
- package/dist/trustedApplications/trustedApplications.view.js +0 -55
- package/dist/ui/pane.js +0 -146
- package/dist/versionInfo.js +0 -41
- package/dist/video/videoPane.js +0 -42
|
@@ -0,0 +1,384 @@
|
|
|
1
|
+
(function(){try{if(typeof document<`u`){var e=document.createElement(`style`);e.appendChild(document.createTextNode(`.schedule-pane__table{border-collapse:collapse;background-color:#fff;min-width:40rem;min-height:13rem}.schedule-pane__button{padding:var(--spacing-xs,.5rem);background-color:#eef;border:.5rem solid #fff;font-size:100%}.schedule-pane__button-icon{width:var(--icon-sm,1.8rem);height:var(--icon-sm,1.8rem)}.schedule-pane__nav{text-align:center;vertical-align:middle;padding-top:4rem}.schedule-pane__cell{padding:var(--spacing-xs,.3rem);text-align:center}.schedule-pane__table .schedule-pane__form-heading{color:#888;padding:.2em;font-weight:700;margin:.7em 0!important;font-size:110%!important}.schedule-pane__table .schedule-pane__form-heading--time-proposals{margin-bottom:0!important}.schedule-pane__table .schedule-pane__panel--time-proposals{border:none!important;padding-bottom:.9rem!important}.schedule-pane__table .schedule-pane__panel{box-sizing:border-box;max-width:100%;margin-right:.5rem;padding-left:.75rem!important;padding-right:.75rem!important}@media (width<=1024px){.schedule-pane__table .schedule-pane__main-cell{box-sizing:border-box;padding-left:.5rem;padding-right:.5rem}.schedule-pane__table .schedule-pane__field-row--comment{flex-wrap:wrap;align-items:flex-start;gap:.5rem;flex-direction:row!important;display:flex!important}.schedule-pane__table .schedule-pane__field-row--comment>div:first-child{flex:0 6rem;min-width:4.5rem;width:auto!important}.schedule-pane__table .schedule-pane__field-value--comment{box-sizing:border-box;flex:20rem;width:auto;min-width:0;padding-right:.25rem}.schedule-pane__table .schedule-pane__field-value--comment .schedule-pane__form-control--textarea,.schedule-pane__table .schedule-pane__field-row--comment .schedule-pane__form-control--textarea{box-sizing:border-box;padding:.5rem .45rem;width:100%!important;min-width:0!important;max-width:100%!important;margin:.2rem 0 0!important}}div.schedule-pane[data-layout=mobile] .schedule-pane__table{table-layout:fixed;width:100%;min-width:0;min-height:0}div.schedule-pane[data-layout=mobile] .schedule-pane__table td,div.schedule-pane[data-layout=mobile] .schedule-pane__table th{overflow-wrap:anywhere;min-width:0;max-width:100%}div.schedule-pane[data-layout=mobile] .schedule-pane__table .schedule-pane__main-cell{box-sizing:border-box;padding-left:.5rem;padding-right:.5rem}div.schedule-pane[data-layout=mobile] .schedule-pane__table .schedule-pane__field-row--compact{align-items:flex-start;gap:.25rem}div.schedule-pane[data-layout=mobile] .schedule-pane__table .schedule-pane__field-row--compact .formFieldName{flex:0 5.5rem;min-width:4.5rem;width:auto!important}div.schedule-pane[data-layout=mobile] .schedule-pane__table .schedule-pane__field-row--compact .formFieldValue{flex:auto;min-width:0}div.schedule-pane[data-layout=mobile] .schedule-pane__table .schedule-pane__field-row--compact .schedule-pane__form-control{box-sizing:border-box;font-size:var(--font-size-sm,.875rem);padding:.35rem .45rem;width:100%!important;min-width:0!important;max-width:100%!important;margin:.2rem 0 0!important}div.schedule-pane[data-layout=mobile] .schedule-pane__table .schedule-pane__field-row--comment{align-items:stretch;gap:.25rem;flex-direction:column!important;display:flex!important}div.schedule-pane[data-layout=mobile] .schedule-pane__table .schedule-pane__field-row--comment .formFieldName,div.schedule-pane[data-layout=mobile] .schedule-pane__table .schedule-pane__field-row--comment>div:first-child{flex:none;min-width:0;width:auto!important}div.schedule-pane[data-layout=mobile] .schedule-pane__table .schedule-pane__field-row--comment .formFieldValue,div.schedule-pane[data-layout=mobile] .schedule-pane__table .schedule-pane__field-row--comment>div:last-child,div.schedule-pane[data-layout=mobile] .schedule-pane__table .schedule-pane__field-value--comment{flex:auto;width:100%;min-width:0;display:block}div.schedule-pane[data-layout=mobile] .schedule-pane__table .schedule-pane__field-row--comment .schedule-pane__form-control--textarea,div.schedule-pane[data-layout=mobile] .schedule-pane__table .schedule-pane__field-value--comment .schedule-pane__form-control--textarea{box-sizing:border-box;font-size:var(--font-size-sm,.875rem);min-height:5.5rem;padding:.35rem .45rem;width:100%!important;min-width:0!important;max-width:100%!important;margin:0!important}div.schedule-pane[data-layout=mobile] .schedule-pane__button{border-width:.2rem;padding:.4rem}div.schedule-pane[data-layout=mobile] .schedule-pane__button-icon{width:1.35rem;height:1.35rem}div.schedule-pane[data-layout=mobile] .schedule-pane__nav{padding-top:1rem}div.schedule-pane[data-layout=mobile] .schedule-pane__cell{padding:.2rem}@media (width<=576px){.schedule-pane__table{table-layout:fixed;width:100%;min-width:0;min-height:0}.schedule-pane__table td,.schedule-pane__table th{overflow-wrap:anywhere;min-width:0;max-width:100%}.schedule-pane__table .schedule-pane__main-cell{box-sizing:border-box;padding-left:.5rem;padding-right:.5rem}.schedule-pane__table .schedule-pane__field-row--compact{align-items:flex-start;gap:.25rem}.schedule-pane__table .schedule-pane__field-row--compact .formFieldName{flex:0 5.5rem;min-width:4.5rem;width:auto!important}.schedule-pane__table .schedule-pane__field-row--compact .formFieldValue{flex:auto;min-width:0}.schedule-pane__table .schedule-pane__field-row--compact .schedule-pane__form-control{box-sizing:border-box;font-size:var(--font-size-sm,.875rem);padding:.35rem .45rem;width:100%!important;min-width:0!important;max-width:100%!important;margin:.2rem 0 0!important}.schedule-pane__table .schedule-pane__field-row--comment{align-items:stretch;gap:.25rem;flex-direction:column!important;display:flex!important}.schedule-pane__table .schedule-pane__field-row--comment .formFieldName,.schedule-pane__table .schedule-pane__field-row--comment>div:first-child{flex:none;min-width:0;width:auto!important}.schedule-pane__table .schedule-pane__field-row--comment .formFieldValue,.schedule-pane__table .schedule-pane__field-row--comment>div:last-child,.schedule-pane__table .schedule-pane__field-value--comment{flex:auto;width:100%;min-width:0;display:block}.schedule-pane__table .schedule-pane__field-row--comment .schedule-pane__form-control--textarea,.schedule-pane__table .schedule-pane__field-value--comment .schedule-pane__form-control--textarea{box-sizing:border-box;font-size:var(--font-size-sm,.875rem);min-height:5.5rem;padding:.35rem .45rem;width:100%!important;min-width:0!important;max-width:100%!important;margin:0!important}.schedule-pane__button{border-width:.2rem;padding:.4rem}.schedule-pane__button-icon{width:1.35rem;height:1.35rem}.schedule-pane__nav{padding-top:1rem}.schedule-pane__cell{padding:.2rem}}
|
|
2
|
+
:root{--icon-sm:1.8em;--color-background-row-default:white;--color-background-row-alternate:#f0f0f0}`)),document.head.appendChild(e)}}catch(e){console.error(`vite-plugin-css-injected-by-js`,e)}})();import e from "./formsForSchedule.esm.js";
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
import * as t from "solid-ui";
|
|
6
|
+
import { authn as n } from "solid-logic";
|
|
7
|
+
import * as r from "rdflib";
|
|
8
|
+
//#region src/schedule/schedulePane.ts
|
|
9
|
+
var i = t.ns, a = [
|
|
10
|
+
i.sched("No"),
|
|
11
|
+
i.sched("Maybe"),
|
|
12
|
+
i.sched("Yes")
|
|
13
|
+
];
|
|
14
|
+
function o(e) {
|
|
15
|
+
let t = e.shift();
|
|
16
|
+
t && t();
|
|
17
|
+
}
|
|
18
|
+
var s = {
|
|
19
|
+
icon: t.icons.iconBase + "noun_346777.svg",
|
|
20
|
+
name: "schedule",
|
|
21
|
+
audience: [i.solid("PowerUser")],
|
|
22
|
+
label: function(e, t) {
|
|
23
|
+
return t.session.store.findTypeURIs(e)["http://www.w3.org/ns/pim/schedule#SchedulableEvent"] ? "Scheduling poll" : null;
|
|
24
|
+
},
|
|
25
|
+
mintClass: i.sched("SchedulableEvent"),
|
|
26
|
+
mintNew: function(e, i) {
|
|
27
|
+
return new Promise(function(a, s) {
|
|
28
|
+
let c = t.ns, l = e.session.store, u = i.newBase, d = i.useExisting || r.sym(i.newBase + "index.ttl#this"), f = function(e, t) {
|
|
29
|
+
e || (console.log("Error in Schedule Pane: Error constructing new scheduler: " + t), s(Error(t)));
|
|
30
|
+
}, p = function(e, n, i) {
|
|
31
|
+
let a = r.graph(), o = r.Namespace("http://www.w3.org/ns/auth/acl#"), s = a.sym(n + "#a1"), l = a.sym(n), u = a.sym(e);
|
|
32
|
+
return a.add(s, t.ns.rdf("type"), o("Authorization"), l), a.add(s, o("accessTo"), u, l), a.add(s, o("agent"), _, l), a.add(s, o("mode"), o("Read"), l), a.add(s, o("mode"), o("Write"), l), a.add(s, o("mode"), o("Control"), l), s = a.sym(n + "#a2"), a.add(s, t.ns.rdf("type"), o("Authorization"), l), a.add(s, o("accessTo"), u, l), a.add(s, o("agentClass"), c.foaf("Agent"), l), a.add(s, o("mode"), o("Read"), l), i && a.add(s, o("mode"), o("Write"), l), r.serialize(l, a, n, "text/turtle");
|
|
33
|
+
}, m = function(e, t, n) {
|
|
34
|
+
let r = l.any(l.sym(e), l.sym("http://www.iana.org/assignments/link-relations/acl"));
|
|
35
|
+
if (r) {
|
|
36
|
+
let i = p(e, r.uri, t);
|
|
37
|
+
return h.webOperation("PUT", r.uri, {
|
|
38
|
+
data: i,
|
|
39
|
+
contentType: "text/turtle"
|
|
40
|
+
}).then((e) => n(!0)).catch((e) => {
|
|
41
|
+
n(!1, e.message);
|
|
42
|
+
});
|
|
43
|
+
} else return h.load(e).catch((e) => {
|
|
44
|
+
n(!1, "Getting headers for ACL: " + e);
|
|
45
|
+
}).then(() => {
|
|
46
|
+
let n = l.any(l.sym(e), l.sym("http://www.iana.org/assignments/link-relations/acl"));
|
|
47
|
+
if (!n) throw Error("No Link rel=ACL header for " + e);
|
|
48
|
+
let r = p(e, n.uri, t);
|
|
49
|
+
return h.webOperation("PUT", n.uri, {
|
|
50
|
+
data: r,
|
|
51
|
+
contentType: "text/turtle"
|
|
52
|
+
});
|
|
53
|
+
}).then((e) => n(!0)).catch((e) => {
|
|
54
|
+
n(!1, e.message);
|
|
55
|
+
});
|
|
56
|
+
}, h = l.fetcher, g = l.updater, _ = i.me || n.currentUser();
|
|
57
|
+
if (!_) {
|
|
58
|
+
console.log("MUST BE LOGGED IN"), alert("NOT LOGGED IN");
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
let v = d.dir();
|
|
62
|
+
if (!v) throw Error("Schedule pane needs a base directory to mint a new poll");
|
|
63
|
+
let y = v.uri, b, x;
|
|
64
|
+
if (i.useExisting) {
|
|
65
|
+
x = i.useExisting;
|
|
66
|
+
let e = d.dir();
|
|
67
|
+
if (!e) throw Error("Existing schedule instance needs a containing directory");
|
|
68
|
+
if (u = e.uri, b = x.doc(), i.newBase) throw Error("mint new scheduler: Illegal - have both new base and existing event");
|
|
69
|
+
} else b = l.sym(u + "details.ttl"), x = l.sym(b.uri + "#event");
|
|
70
|
+
let S = l.sym(u + "results.ttl"), C = i.noIndexHTML ? [] : [{
|
|
71
|
+
local: "index.html",
|
|
72
|
+
contentType: "text/html"
|
|
73
|
+
}], w = [];
|
|
74
|
+
for (let e = 0; e < C.length; e++) (function(e) {
|
|
75
|
+
w.push(function() {
|
|
76
|
+
let t = u + e.local;
|
|
77
|
+
console.log("Copying " + y + e.local + " to " + t);
|
|
78
|
+
let r = function() {
|
|
79
|
+
m(t, !1, function(e, n) {
|
|
80
|
+
e ? o(w) : (f(e, "FAILED to set ACL " + t + " : " + n), console.log("FAILED to set ACL " + t + " : " + n));
|
|
81
|
+
});
|
|
82
|
+
};
|
|
83
|
+
l.fetcher.webCopy(y + e.local, u + e.local, e.contentType).then(() => n.checkUser()).then((e) => {
|
|
84
|
+
_ = e, r();
|
|
85
|
+
}).catch((t) => {
|
|
86
|
+
console.log("FAILED to copy " + y + e.local + " : " + t.message), f(!1, "FAILED to copy " + y + e.local + " : " + t.message);
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
})(C[e]);
|
|
90
|
+
w.push(function() {
|
|
91
|
+
l.add(x, c.rdf("type"), c.sched("SchedulableEvent"), b), _ && (l.add(x, c.dc("author"), _, b), l.add(x, c.foaf("maker"), _, b)), l.add(x, c.dc("created"), r.literal((/* @__PURE__ */ new Date()).toISOString(), r.sym("http://www.w3.org/2001/XMLSchema#dateTime")), b), l.add(x, c.sched("resultsDocument"), b), g.put(b, l.statementsMatching(void 0, void 0, void 0, b), "text/turtle", function(e, t, n) {
|
|
92
|
+
t ? o(w) : (f(t, "FAILED to save new scheduler at: " + b + " : " + n), console.log("FAILED to save new scheduler at: " + b + " : " + n));
|
|
93
|
+
});
|
|
94
|
+
}), w.push(function() {
|
|
95
|
+
l.fetcher.webOperation("PUT", S.uri, {
|
|
96
|
+
data: "",
|
|
97
|
+
contentType: "text/turtle"
|
|
98
|
+
}).then(() => {
|
|
99
|
+
o(w);
|
|
100
|
+
}).catch((e) => {
|
|
101
|
+
f(!1, "Failed to initialize empty results file: " + e.message);
|
|
102
|
+
});
|
|
103
|
+
}), w.push(function() {
|
|
104
|
+
m(S.uri, !0, function(e, t) {
|
|
105
|
+
f(e, "Failed to set Read-Write ACL on results file: " + t), e && o(w);
|
|
106
|
+
});
|
|
107
|
+
}), w.push(function() {
|
|
108
|
+
m(b.uri, !1, function(e, t) {
|
|
109
|
+
f(e, "Failed to set read ACL on configuration file: " + t), e && o(w);
|
|
110
|
+
});
|
|
111
|
+
}), w.push(function() {
|
|
112
|
+
console.log("Finished minting new scheduler"), i.newInstance = x, a(i);
|
|
113
|
+
}), o(w);
|
|
114
|
+
});
|
|
115
|
+
},
|
|
116
|
+
render: function(i, o) {
|
|
117
|
+
let c = o.dom, l = o.session.store, u = t.ns, d = i, f = "app-when-can-we.w3.org";
|
|
118
|
+
function p(e) {
|
|
119
|
+
let t = o.environment ?? {};
|
|
120
|
+
e.dataset.layout = t.layout ?? "desktop";
|
|
121
|
+
}
|
|
122
|
+
let m = l.fetcher, h = l.updater, g = !1, _ = i, v = i.doc(), y = v.dir();
|
|
123
|
+
if (!y) throw Error("Schedule pane needs a containing directory for its details document");
|
|
124
|
+
let b = y.uri, x = r.sym(b + "results.ttl"), S = "https://solidos.github.io/solid-panes/schedule/formsForSchedule.ttl", C = l.sym("https://solidos.github.io/solid-panes/schedule/formsForSchedule.ttl#form1"), w = l.sym("https://solidos.github.io/solid-panes/schedule/formsForSchedule.ttl#form2"), T = l.sym("https://solidos.github.io/solid-panes/schedule/formsForSchedule.ttl#form3");
|
|
125
|
+
r.parse(e, l, S, "text/turtle");
|
|
126
|
+
let E = function(e, n) {
|
|
127
|
+
e || H.appendChild(t.widgets.errorMessageBlock(c, n, "pink"));
|
|
128
|
+
}, D = function(e) {
|
|
129
|
+
for (; e.firstChild;) e.removeChild(e.firstChild);
|
|
130
|
+
return e;
|
|
131
|
+
}, O = function(e, n) {
|
|
132
|
+
let r = l.any(n, t.ns.ui("backgroundColor"));
|
|
133
|
+
r && (e.classList.add("schedule-pane__cell"), e.setAttribute("style", "background-color: " + r + ";"));
|
|
134
|
+
}, k = null;
|
|
135
|
+
n.checkUser().then((e) => {
|
|
136
|
+
k = e ?? null, W && W.refresh(), e && g && (g = !1, F());
|
|
137
|
+
}), console.log("me: " + k);
|
|
138
|
+
let A = function() {
|
|
139
|
+
let e = t.login.newAppInstance(c, {
|
|
140
|
+
noun: "scheduler",
|
|
141
|
+
appPathSegment: f
|
|
142
|
+
}, function(e, t) {
|
|
143
|
+
return j(r.sym(e || t));
|
|
144
|
+
});
|
|
145
|
+
return e.firstChild instanceof HTMLElement && e.firstChild.classList.add("schedule-pane__button"), e;
|
|
146
|
+
}, j = function(e) {
|
|
147
|
+
let t = l.any(e, u.space("uriPrefix")), n = "";
|
|
148
|
+
n = t ? t.value : e.uri.split("#")[0], n.slice(-1) !== "/" && (r.log.error("app-when-can-we.w3.org: No / at end of uriPrefix " + n), n += "/"), n += "app-when-can-we.w3.org/id" + (/* @__PURE__ */ new Date()).getTime() + "/", M(_, n);
|
|
149
|
+
}, M = function(e, t) {
|
|
150
|
+
let n = {
|
|
151
|
+
thisInstance: e,
|
|
152
|
+
newBase: t
|
|
153
|
+
};
|
|
154
|
+
s.mintNew(o, n).then(function(e) {
|
|
155
|
+
if (!e.newInstance) throw Error("New scheduler instance was not returned");
|
|
156
|
+
let t = H.appendChild(c.createElement("p"));
|
|
157
|
+
t.setAttribute("style", "font-size: 140%;"), t.innerHTML = "Your <a href='" + e.newInstance.uri + "'><b>new scheduler</b></a> is ready to be set up. <br/><br/><a href='" + e.newInstance.uri + "'>Say when you what days work for you.</a>";
|
|
158
|
+
}).catch(function(e) {
|
|
159
|
+
E(!1, "Error createing new scheduler at " + n.newInstance + ": " + e);
|
|
160
|
+
});
|
|
161
|
+
}, N = function() {
|
|
162
|
+
console.log("getforms()"), P();
|
|
163
|
+
}, P = function() {
|
|
164
|
+
console.log("getDetails()"), m.nowOrWhenFetched(v.uri, void 0, function(e, t) {
|
|
165
|
+
if (console.log("getDetails() ok? " + e), !e) return E(e, t);
|
|
166
|
+
F();
|
|
167
|
+
});
|
|
168
|
+
}, F = function() {
|
|
169
|
+
console.log("showAppropriateDisplay()"), n.checkUser().then((e) => {
|
|
170
|
+
if (!e) return I();
|
|
171
|
+
if (!l.updater.editable(v.uri, l) || l.holds(i, u.rdf("type"), u.wf("TemplateInstance"))) {
|
|
172
|
+
L();
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
l.any(i, u.sched("ready")) ? B() : z();
|
|
176
|
+
});
|
|
177
|
+
}, I = function() {
|
|
178
|
+
D(G);
|
|
179
|
+
let e = {
|
|
180
|
+
div: H,
|
|
181
|
+
dom: c
|
|
182
|
+
};
|
|
183
|
+
t.login.ensureLoggedIn(e).then((e) => {
|
|
184
|
+
k = e.me ?? null, g = !1, F();
|
|
185
|
+
});
|
|
186
|
+
}, L = function() {
|
|
187
|
+
let e = D(G);
|
|
188
|
+
e.appendChild(t.login.newAppInstance(c, {
|
|
189
|
+
noun: "poll",
|
|
190
|
+
appPathSegment: f
|
|
191
|
+
}, function(e, t) {
|
|
192
|
+
return j(r.sym(e || t));
|
|
193
|
+
})), e.appendChild(c.createElement("hr"));
|
|
194
|
+
let n = e.appendChild(c.createElement("p"));
|
|
195
|
+
n.textContent = "Where would you like to store the data for the poll? Give the URL of the directory where you would like the data stored.";
|
|
196
|
+
let i = e.appendChild(c.createElement("input"));
|
|
197
|
+
i.setAttribute("type", "text"), i.size = 80, i.label = "base URL", i.autocomplete = "on", e.appendChild(c.createElement("br"));
|
|
198
|
+
let a = e.appendChild(c.createElement("button"));
|
|
199
|
+
a.classList.add("schedule-pane__button"), a.textContent = "Start new poll at this URI", a.addEventListener("click", function(e) {
|
|
200
|
+
let t = i.value;
|
|
201
|
+
t.slice(-1) !== "/" && (t += "/"), M(_, t);
|
|
202
|
+
});
|
|
203
|
+
}, R = c.createElement("button"), z = function() {
|
|
204
|
+
D(J), l.any(i, u.sched("allDay")) || l.add(i, u.sched("allDay"), r.literal("true", r.sym("http://www.w3.org/2001/XMLSchema#boolean")), v);
|
|
205
|
+
let e = 0, n = !1, a = function(e) {
|
|
206
|
+
return !!e.querySelector("input, select, textarea, button");
|
|
207
|
+
}, o = function(e, t) {
|
|
208
|
+
if (!e) return t;
|
|
209
|
+
let n = (e.value || "").toLowerCase();
|
|
210
|
+
return n === "true" || n === "1" ? !0 : n === "false" || n === "0" ? !1 : t;
|
|
211
|
+
}, s = function(e) {
|
|
212
|
+
let n = o(l.any(i, u.sched("allDay")), !0), r = l.sym(S + (n ? "#AllDayForm2" : "#NotAllDayForm2"));
|
|
213
|
+
t.widgets.appendForm(document, e, {}, i, r, v, E);
|
|
214
|
+
}, d = function(e, t = !1) {
|
|
215
|
+
if (Array.from(e.querySelectorAll("input, select, textarea")).forEach((e) => {
|
|
216
|
+
e.classList.add("schedule-pane__form-control"), e.tagName.toLowerCase() === "textarea" && e.classList.add("schedule-pane__form-control--textarea");
|
|
217
|
+
}), Array.from(e.querySelectorAll("div[style*=\"border: 0.05em solid\"]")).forEach((e) => {
|
|
218
|
+
e.classList.add("schedule-pane__panel");
|
|
219
|
+
}), Array.from(e.querySelectorAll("h3")).forEach((e) => {
|
|
220
|
+
e.classList.add("schedule-pane__form-heading"), (e.textContent || "").trim().toLowerCase() === "time proposals" && (e.classList.add("schedule-pane__form-heading--time-proposals"), e.closest(".schedule-pane__panel")?.classList.add("schedule-pane__panel--time-proposals"));
|
|
221
|
+
}), !t) return;
|
|
222
|
+
Array.from(e.querySelectorAll(".formFieldName")).forEach((e) => {
|
|
223
|
+
let t = e.parentElement, n = (e.textContent || "").trim().toLowerCase();
|
|
224
|
+
t && ((n === "summary" || n === "location") && t.classList.add("schedule-pane__field-row--compact"), n === "comment" && t.classList.add("schedule-pane__field-row--comment"));
|
|
225
|
+
});
|
|
226
|
+
let n = e.querySelector("textarea")?.parentElement?.parentElement, r = n?.parentElement;
|
|
227
|
+
r && r.classList.add("schedule-pane__field-row--comment"), n && n.classList.add("schedule-pane__field-value--comment");
|
|
228
|
+
}, f = function(e) {
|
|
229
|
+
let t = e.firstElementChild;
|
|
230
|
+
return !t || e.childElementCount !== 1 ? e : t;
|
|
231
|
+
};
|
|
232
|
+
{
|
|
233
|
+
let r = [
|
|
234
|
+
C,
|
|
235
|
+
w,
|
|
236
|
+
T
|
|
237
|
+
], o = [];
|
|
238
|
+
e = 0;
|
|
239
|
+
for (let e = 0; e < r.length; e++) {
|
|
240
|
+
let n = c.createElement("div");
|
|
241
|
+
t.widgets.appendForm(document, n, {}, i, r[e], v, E), d(n, e === 0), e === 1 && !a(n) && (s(n), d(n)), o.push(f(n));
|
|
242
|
+
}
|
|
243
|
+
let l = function() {
|
|
244
|
+
D(G).appendChild(o[e]), e === 0 ? u.setAttribute("disabled", "") : u.removeAttribute("disabled"), e === o.length - 1 ? (p.setAttribute("disabled", ""), n ||= (J.appendChild(m), J.appendChild(R), !0)) : p.removeAttribute("disabled");
|
|
245
|
+
}, u = D(q).appendChild(c.createElement("button"));
|
|
246
|
+
u.classList.add("schedule-pane__button"), u.textContent = "<- go back", u.addEventListener("click", function(t) {
|
|
247
|
+
e > 0 && (--e, l());
|
|
248
|
+
}, !1);
|
|
249
|
+
let p = D(Y).appendChild(c.createElement("button"));
|
|
250
|
+
p.classList.add("schedule-pane__button"), p.textContent = "continue ->", p.addEventListener("click", function(t) {
|
|
251
|
+
e < o.length - 1 && (e += 1, l());
|
|
252
|
+
}, !1), l();
|
|
253
|
+
}
|
|
254
|
+
let p = [];
|
|
255
|
+
p.push(r.st(i, u.sched("availabilityOptions"), u.sched("YesNoMaybe"), v)), p.push(r.st(i, u.sched("ready"), r.literal((/* @__PURE__ */ new Date()).toISOString(), r.sym("http://www.w3.org/2001/XMLSchema#dateTime")), v)), p.push(r.st(i, u.sched("results"), x, v)), R.classList.add("schedule-pane__button"), R.textContent = "Go to poll", R.addEventListener("click", function(e) {
|
|
256
|
+
l.any(i, u.sched("ready")) ? (B(), Y.appendChild(m)) : (Y.appendChild(m), l.updater.update([], p, function(e, t, n) {
|
|
257
|
+
t ? B() : E(t, n);
|
|
258
|
+
}));
|
|
259
|
+
}, !1);
|
|
260
|
+
let m = c.createElement("button");
|
|
261
|
+
m.classList.add("schedule-pane__button");
|
|
262
|
+
let h = m.appendChild(c.createElement("img"));
|
|
263
|
+
h.setAttribute("src", t.icons.iconBase + "noun_480183.svg"), h.classList.add("schedule-pane__button-icon"), m.addEventListener("click", function(e) {
|
|
264
|
+
let t = l.anyValue(i, u.cal("summary")) || l.anyValue(i, u.dc("title")) || "", n = "mailto:" + l.each(i, u.sched("invitee")).map(function(e) {
|
|
265
|
+
let t = l.any(e, u.foaf("mbox"));
|
|
266
|
+
return t ? t.uri.replace("mailto:", "") : "";
|
|
267
|
+
}).join(",") + "?subject=" + encodeURIComponent(t + "-- When can we meet?") + "&body=" + encodeURIComponent(t + "\n\nWhen can you?\n\nSee " + i + "\n");
|
|
268
|
+
console.log("Mail: " + n), window.location.href = n;
|
|
269
|
+
}, !1);
|
|
270
|
+
};
|
|
271
|
+
function B() {
|
|
272
|
+
m.nowOrWhenFetched(x.uri, void 0, (e, t, n) => {
|
|
273
|
+
e ? (D(G), V()) : n.status === 404 ? (console.log("Initializing details file " + x), h.put(x, [], "text/turtle", function(e, t, n) {
|
|
274
|
+
t ? (D(G), V()) : (E(t, "FAILED to create results file at: " + x.uri + " : " + n), console.log("FAILED to craete results file at: " + x.uri + " : " + n));
|
|
275
|
+
})) : E(e, "FAILED to read results file: " + t);
|
|
276
|
+
});
|
|
277
|
+
}
|
|
278
|
+
function V() {
|
|
279
|
+
let e = l.any(d, u.cal("summary")), n = l.any(d, u.cal("comment")), o = l.any(d, u.cal("location")), s = G;
|
|
280
|
+
e && (s.appendChild(c.createElement("h3")).textContent = e.value), o && (s.appendChild(c.createElement("address")).textContent = o.value), n && (s.appendChild(c.createElement("p")).textContent = n.value);
|
|
281
|
+
let f = l.any(d, u.dc("author"));
|
|
282
|
+
if (f) {
|
|
283
|
+
let e = l.any(f, u.foaf("name"));
|
|
284
|
+
e && (s.appendChild(c.createElement("p")).textContent = e.value);
|
|
285
|
+
}
|
|
286
|
+
let p = new r.Query("Responses", 0), m = {};
|
|
287
|
+
m.time = r.variable("time"), m.author = r.variable("author"), m.value = r.variable("value"), m.resp = r.variable("resp"), m.cell = r.variable("cell"), p.vars.push(m.time, m.author, m.value, m.resp, m.cell), p.pat.add(d, u.sched("response"), m.resp), p.pat.add(m.resp, u.dc("author"), m.author), p.pat.add(m.resp, u.sched("cell"), m.cell), p.pat.add(m.cell, u.sched("availabilty"), m.value), p.pat.add(m.cell, u.cal("dtstart"), m.time);
|
|
288
|
+
let h = {
|
|
289
|
+
set_x: [],
|
|
290
|
+
set_y: []
|
|
291
|
+
};
|
|
292
|
+
h.set_x = l.each(i, u.sched("option")), h.set_x = h.set_x.map(function(e) {
|
|
293
|
+
return l.any(e, u.cal("dtstart"));
|
|
294
|
+
}).filter(function(e) {
|
|
295
|
+
return !!e;
|
|
296
|
+
}), h.set_y = l.each(i, u.sched("response")), h.set_y = h.set_y.map(function(e) {
|
|
297
|
+
return l.any(e, u.dc("author"));
|
|
298
|
+
}).filter(function(e) {
|
|
299
|
+
return !!e;
|
|
300
|
+
});
|
|
301
|
+
let g = l.each(d, u.sched("option")).map(function(e) {
|
|
302
|
+
return l.any(e, u.cal("dtstart"));
|
|
303
|
+
}).filter(function(e) {
|
|
304
|
+
return !!e;
|
|
305
|
+
}), _ = function() {
|
|
306
|
+
let e = s.appendChild(t.matrix.matrixForQuery(c, p, m.time, m.author, m.value, h, function() {}));
|
|
307
|
+
e.setAttribute("class", "matrix");
|
|
308
|
+
let n = c.createElement("button");
|
|
309
|
+
n.classList.add("schedule-pane__button");
|
|
310
|
+
let r = c.createElement("img");
|
|
311
|
+
r.setAttribute("src", t.icons.iconBase + "noun_479395.svg"), r.classList.add("schedule-pane__button-icon"), n.appendChild(r), n.addEventListener("click", function(t) {
|
|
312
|
+
n.disabled = !0, l.fetcher.refresh(x, function(t, r) {
|
|
313
|
+
t ? (e.refresh(), n.disabled = !1) : console.log("Cant refresh matrix" + r);
|
|
314
|
+
});
|
|
315
|
+
}, !1), D(J), J.appendChild(n);
|
|
316
|
+
}, v = {}, y = {
|
|
317
|
+
div: J,
|
|
318
|
+
dom: c
|
|
319
|
+
};
|
|
320
|
+
t.login.ensureLoggedIn(y).then((e) => {
|
|
321
|
+
let n = e.me;
|
|
322
|
+
if (!n) return;
|
|
323
|
+
let i = x;
|
|
324
|
+
h.set_y = h.set_y.filter(function(e) {
|
|
325
|
+
return !e.sameTerm(n);
|
|
326
|
+
}), h.set_y.push(n), h.cellFunction = function(e, r, i, o) {
|
|
327
|
+
if (o !== null && l.fetcher.nowOrWhenFetched(o.uri.split("#")[0], void 0, function(t, n) {
|
|
328
|
+
t && O(e, o);
|
|
329
|
+
}), i.sameTerm(n)) {
|
|
330
|
+
let n = function() {
|
|
331
|
+
return O(e, o), "";
|
|
332
|
+
}, i = {}, s = u.sched("availabilty");
|
|
333
|
+
if (!r) return "";
|
|
334
|
+
let d = v[r.toNT()], f = t.widgets.makeSelectForOptions(c, l, d, s, a, i, x, n);
|
|
335
|
+
e.appendChild(f);
|
|
336
|
+
} else o !== null && (e.textContent = t.utils.label(o));
|
|
337
|
+
return "";
|
|
338
|
+
};
|
|
339
|
+
let o = l.each(d, u.sched("response")), s = null;
|
|
340
|
+
o.forEach(function(e) {
|
|
341
|
+
l.holds(e, u.dc("author"), n) && (s = e);
|
|
342
|
+
});
|
|
343
|
+
let f = [], p = t.widgets.newThing(i).uri;
|
|
344
|
+
s === null ? (s = r.sym(p + "_response"), f.push(r.st(d, u.sched("response"), s, i)), f.push(r.st(s, u.dc("author"), n, i))) : l.each(s, u.sched("cell")).forEach(function(e) {
|
|
345
|
+
let t = l.any(e, u.cal("dtstart"));
|
|
346
|
+
t && (v[t.toNT()] = e);
|
|
347
|
+
});
|
|
348
|
+
for (let e = 0; e < g.length; e++) {
|
|
349
|
+
let t = g[e];
|
|
350
|
+
if (!t || v[t.toNT()]) continue;
|
|
351
|
+
let n = r.sym(p + "_" + e);
|
|
352
|
+
f.push(r.st(s, u.sched("cell"), n, i)), f.push(r.st(n, u.cal("dtstart"), t, i)), v[t.toNT()] = n;
|
|
353
|
+
}
|
|
354
|
+
f.length ? l.updater.update([], f, function(e, t, n) {
|
|
355
|
+
t ? _() : E(t, n);
|
|
356
|
+
}) : _();
|
|
357
|
+
});
|
|
358
|
+
let b = l.any(i, u.foaf("maker"));
|
|
359
|
+
if (!b || !k || b.sameTerm(k)) {
|
|
360
|
+
let e = c.createElement("button");
|
|
361
|
+
e.classList.add("schedule-pane__button");
|
|
362
|
+
let n = c.createElement("img");
|
|
363
|
+
n.setAttribute("src", t.icons.iconBase + "noun_344563.svg"), n.classList.add("schedule-pane__button-icon"), e.appendChild(n), e.addEventListener("click", function(e) {
|
|
364
|
+
D(s), z();
|
|
365
|
+
}, !1), D(q), q.appendChild(e);
|
|
366
|
+
}
|
|
367
|
+
D(Y), Y.appendChild(A());
|
|
368
|
+
}
|
|
369
|
+
let H = c.createElement("div");
|
|
370
|
+
H.classList.add("schedule-pane"), p(H);
|
|
371
|
+
let U = H.appendChild(c.createElement("table"));
|
|
372
|
+
U.classList.add("schedule-pane__table");
|
|
373
|
+
let W = null, G = U.appendChild(c.createElement("tr")).appendChild(c.createElement("td"));
|
|
374
|
+
G.classList.add("schedule-pane__main-cell"), G.setAttribute("colspan", "3");
|
|
375
|
+
let K = U.appendChild(c.createElement("tr"));
|
|
376
|
+
K.classList.add("naviMenu", "schedule-pane__nav");
|
|
377
|
+
let q = K.appendChild(c.createElement("td")), J = K.appendChild(c.createElement("td")), Y = K.appendChild(c.createElement("td"));
|
|
378
|
+
return N(), H;
|
|
379
|
+
}
|
|
380
|
+
};
|
|
381
|
+
//#endregion
|
|
382
|
+
export { s as schedulePane };
|
|
383
|
+
|
|
384
|
+
//# sourceMappingURL=schedulePane2.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schedulePane2.esm.js","names":[],"sources":["../../src/schedule/schedulePane.ts"],"sourcesContent":["/* Scheduler Pane\n **\n **\n */\n/* global alert */\n\nimport * as UI from 'solid-ui'\nimport { authn } from 'solid-logic'\nimport * as $rdf from 'rdflib'\nimport type { DataBrowserContext, RenderEnvironment } from 'pane-registry'\nimport type { NamedNode, Node as RdflibNode, Statement, Variable } from 'rdflib'\nimport formText from './formsForSchedule.ttl'\nimport './schedulePane.css'\nimport '../styles/utilities.css'\n\nconst ns = UI.ns\n\n// @@ Give other combos too-- see schedule ontology\nconst possibleAvailabilities = [\n ns.sched('No'),\n ns.sched('Maybe'),\n ns.sched('Yes')\n]\n\ntype AgendaTask = () => void\n\ntype CopySpec = {\n local: string\n contentType: string\n}\n\ntype MintOptions = {\n newBase: string\n useExisting?: NamedNode\n noIndexHTML?: boolean\n me?: NamedNode | null\n newInstance?: NamedNode\n thisInstance?: NamedNode\n}\n\ntype MatrixOptionsLike = {\n set_x: RdflibNode[]\n set_y: RdflibNode[]\n cellFunction?: (cell: HTMLElement, x: RdflibNode, y: RdflibNode, value: NamedNode | null) => string\n}\n\ntype ResponseQueryVars = {\n time: Variable\n author: Variable\n value: Variable\n resp: Variable\n cell: Variable\n}\n\ntype LoginStatusBoxLike = {\n refresh: () => void\n}\n\nfunction runNextAgendaItem (agenda: AgendaTask[]): void {\n const nextTask = agenda.shift()\n if (nextTask) {\n nextTask()\n }\n}\n\nexport const schedulePane = {\n icon: UI.icons.iconBase + 'noun_346777.svg', // @@ better?\n\n name: 'schedule',\n\n audience: [ns.solid('PowerUser')],\n\n // Does the subject deserve an Scheduler pane?\n label: function (subject: NamedNode, context: DataBrowserContext) {\n const kb = context.session.store\n const t = kb.findTypeURIs(subject)\n if (t['http://www.w3.org/ns/pim/schedule#SchedulableEvent']) {\n return 'Scheduling poll'\n }\n return null // No under other circumstances\n },\n\n // Mint a new Schedule poll\n mintClass: ns.sched('SchedulableEvent'),\n\n mintNew: function (context: DataBrowserContext, options: MintOptions) {\n return new Promise<MintOptions>(function (resolve, reject) {\n const ns = UI.ns\n const kb = context.session.store\n let newBase = options.newBase\n const thisInstance =\n options.useExisting || $rdf.sym(options.newBase + 'index.ttl#this')\n\n const complainIfBad = function (ok: boolean, body: string) {\n if (ok) return\n console.log(\n 'Error in Schedule Pane: Error constructing new scheduler: ' + body\n )\n reject(new Error(body))\n }\n\n // ////////////////////// Accesss 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\n const genACLtext = function (docURI: string, aclURI: string, allWrite: boolean) {\n const g = $rdf.graph()\n const auth = $rdf.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, UI.ns.rdf('type'), auth('Authorization'), acl)\n g.add(a, auth('accessTo'), doc, acl)\n g.add(a, auth('agent'), me as NamedNode, 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, UI.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 return $rdf.serialize(acl, g, aclURI, 'text/turtle')\n }\n\n /*\n const setACL3 = function (docURI, allWrite, callbackFunction) {\n const aclText = genACLtext(docURI, aclDoc.uri, allWrite)\n return UI.acl.setACL(docURI, aclText, callbackFunction)\n }\n */\n\n const setACL2 = function setACL2 (docURI, allWrite, callbackFunction) {\n const aclDoc = kb.any(\n kb.sym(docURI),\n kb.sym('http://www.iana.org/assignments/link-relations/acl')\n ) as NamedNode | null // @@ check that this get set by web.js\n\n if (aclDoc) {\n // Great we already know where it is\n const aclText = genACLtext(docURI, aclDoc.uri, allWrite)\n\n return fetcher\n .webOperation('PUT', aclDoc.uri, {\n data: aclText,\n contentType: 'text/turtle'\n })\n .then(_result => callbackFunction(true))\n .catch(err => {\n callbackFunction(false, err.message)\n })\n } else {\n return fetcher\n .load(docURI)\n .catch(err => {\n callbackFunction(false, 'Getting headers for ACL: ' + err)\n })\n .then(() => {\n const aclDoc = kb.any(\n kb.sym(docURI),\n kb.sym('http://www.iana.org/assignments/link-relations/acl')\n ) as NamedNode | null\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(_result => callbackFunction(true))\n .catch(err => {\n callbackFunction(false, err.message)\n })\n }\n }\n\n // Body of mintNew\n const fetcher = kb.fetcher\n const updater = kb.updater\n\n let me: NamedNode | null = options.me || authn.currentUser()\n if (!me) {\n console.log('MUST BE LOGGED IN')\n alert('NOT LOGGED IN')\n return\n }\n\n const baseDir = thisInstance.dir()\n if (!baseDir) {\n throw new Error('Schedule pane needs a base directory to mint a new poll')\n }\n const base = baseDir.uri\n let newDetailsDoc: NamedNode\n let newInstance: NamedNode\n\n if (options.useExisting) {\n newInstance = options.useExisting\n const existingBaseDir = thisInstance.dir()\n if (!existingBaseDir) {\n throw new Error('Existing schedule instance needs a containing directory')\n }\n newBase = existingBaseDir.uri\n newDetailsDoc = newInstance.doc()\n // newIndexDoc = null\n if (options.newBase) {\n throw new Error(\n 'mint new scheduler: Illegal - have both new base and existing event'\n )\n }\n } else {\n newDetailsDoc = kb.sym(newBase + 'details.ttl')\n // newIndexDoc = kb.sym(newBase + 'index.html')\n newInstance = kb.sym(newDetailsDoc.uri + '#event')\n }\n\n const newResultsDoc = kb.sym(newBase + 'results.ttl')\n\n const toBeCopied: CopySpec[] = options.noIndexHTML\n ? []\n : [{ local: 'index.html', contentType: 'text/html' }]\n\n const agenda: AgendaTask[] = []\n\n // @@ This needs some form of visible progress bar\n for (let f = 0; f < toBeCopied.length; f++) {\n const item = toBeCopied[f]\n const fun = function copyItem (item: CopySpec) {\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 setACL2(newURI, false, function (ok, message) {\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 runNextAgendaItem(agenda) // beware too much nesting\n }\n })\n }\n\n kb.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 as NamedNode | null\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 createDetailsFile () {\n kb.add(\n newInstance,\n ns.rdf('type'),\n ns.sched('SchedulableEvent'),\n newDetailsDoc\n )\n if (me) {\n kb.add(newInstance, ns.dc('author'), me, newDetailsDoc) // Who is sending the invitation?\n kb.add(newInstance, ns.foaf('maker'), me, newDetailsDoc) // Uneditable - wh is allowed to edit this?\n }\n\n kb.add(\n newInstance,\n ns.dc('created'),\n $rdf.literal(\n new Date().toISOString(),\n $rdf.sym('http://www.w3.org/2001/XMLSchema#dateTime')\n ),\n newDetailsDoc\n )\n kb.add(newInstance, ns.sched('resultsDocument'), newDetailsDoc)\n\n updater.put(\n newDetailsDoc,\n kb.statementsMatching(undefined, undefined, undefined, newDetailsDoc),\n 'text/turtle',\n function (uri2, ok, message) {\n if (ok) {\n runNextAgendaItem(agenda)\n } else {\n complainIfBad(\n ok,\n 'FAILED to save new scheduler at: ' +\n newDetailsDoc +\n ' : ' +\n message\n )\n console.log(\n 'FAILED to save new scheduler at: ' +\n newDetailsDoc +\n ' : ' +\n message\n )\n }\n }\n )\n })\n\n agenda.push(function () {\n kb.fetcher\n .webOperation('PUT', newResultsDoc.uri, {\n data: '',\n contentType: 'text/turtle'\n })\n .then(() => {\n runNextAgendaItem(agenda)\n })\n .catch(err => {\n complainIfBad(\n false,\n 'Failed to initialize empty results file: ' + err.message\n )\n })\n })\n\n agenda.push(function () {\n setACL2(newResultsDoc.uri, true, function (ok, body) {\n complainIfBad(\n ok,\n 'Failed to set Read-Write ACL on results file: ' + body\n )\n if (ok) runNextAgendaItem(agenda)\n })\n })\n\n agenda.push(function () {\n setACL2(newDetailsDoc.uri, false, function (ok, body) {\n complainIfBad(\n ok,\n 'Failed to set read ACL on configuration file: ' + body\n )\n if (ok) runNextAgendaItem(agenda)\n })\n })\n\n agenda.push(function () {\n // give the user links to the new app\n console.log('Finished minting new scheduler')\n options.newInstance = newInstance\n resolve(options)\n })\n\n runNextAgendaItem(agenda)\n // Created new data files.\n }) // promise\n }, // mintNew\n\n // Render one meeting schedule poll\n render: function (subject: NamedNode, context: DataBrowserContext) {\n const dom = context.dom\n const kb = context.session.store\n const ns = UI.ns\n const invitation = subject\n const appPathSegment = 'app-when-can-we.w3.org' // how to allocate this string and connect to\n\n function applyEnvironmentAttributes (element: HTMLDivElement): void {\n const environment = (context.environment ?? {}) as Partial<RenderEnvironment>\n element.dataset.layout = environment.layout ?? 'desktop'\n }\n\n // ////////////////////////////////////////////\n\n const fetcher = kb.fetcher\n const updater = kb.updater\n let waitingForLogin = false\n\n const thisInstance = subject\n const detailsDoc = subject.doc()\n const baseDir = detailsDoc.dir()\n if (!baseDir) {\n throw new Error('Schedule pane needs a containing directory for its details document')\n }\n const base = baseDir.uri\n\n const resultsDoc = $rdf.sym(base + 'results.ttl')\n // const formsURI = base + 'forms.ttl'\n // We can't in fact host stuff from there because of CORS\n const formsURI =\n 'https://solidos.github.io/solid-panes/schedule/formsForSchedule.ttl'\n\n const form1 = kb.sym(formsURI + '#form1')\n const form2 = kb.sym(formsURI + '#form2')\n const form3 = kb.sym(formsURI + '#form3')\n\n $rdf.parse(formText, kb, formsURI, 'text/turtle') // Load forms directly\n\n // Utility functions\n\n const complainIfBad = function (ok, message) {\n if (!ok) {\n div.appendChild(UI.widgets.errorMessageBlock(dom, message, 'pink'))\n }\n }\n\n const clearElement = function (ele) {\n while (ele.firstChild) {\n ele.removeChild(ele.firstChild)\n }\n return ele\n }\n\n const refreshCellColor = function (cell, value) {\n const bg = kb.any(value, UI.ns.ui('backgroundColor'))\n if (bg) {\n cell.classList.add('schedule-pane__cell')\n cell.setAttribute(\n 'style',\n 'background-color: ' + bg + ';'\n )\n }\n }\n\n let me: NamedNode | null = null\n\n authn.checkUser().then(webId => {\n me = (webId as NamedNode | null) ?? null\n\n if (logInOutButton) {\n logInOutButton.refresh()\n }\n if (webId && waitingForLogin) {\n waitingForLogin = false\n showAppropriateDisplay()\n }\n })\n console.log('me: ' + me) // @@ curently not actually used elsewhere\n\n // ////////////////////////////// Reproduction: spawn a new instance\n //\n // Viral growth path: user of app decides to make another instance\n //\n\n const newInstanceButton = function () {\n const b = UI.login.newAppInstance(\n dom,\n { noun: 'scheduler', appPathSegment },\n function (workspace: string | null, newBase: string) {\n return initializeNewInstanceInWorkspace(\n $rdf.sym(workspace || newBase)\n )\n }\n )\n if (b.firstChild instanceof HTMLElement) {\n b.firstChild.classList.add('schedule-pane__button')\n }\n return b\n } // newInstanceButton\n\n // /////////////////////// Create new document files for new instance of app\n\n const initializeNewInstanceInWorkspace = function (ws: NamedNode) {\n const uriPrefix = kb.any(ws, ns.space('uriPrefix'))\n let newBase = ''\n if (!uriPrefix) {\n newBase = ws.uri.split('#')[0]\n } else {\n newBase = uriPrefix.value\n }\n if (newBase.slice(-1) !== '/') {\n $rdf.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 (thisInstance: NamedNode, newBase: string) {\n const options: MintOptions = { thisInstance, newBase }\n schedulePane.mintNew(context, options)\n .then(function (options) {\n if (!options.newInstance) {\n throw new Error('New scheduler instance was not returned')\n }\n const p = div.appendChild(dom.createElement('p'))\n p.setAttribute('style', 'font-size: 140%;')\n p.innerHTML =\n 'Your <a href=\\'' +\n options.newInstance.uri +\n '\\'><b>new scheduler</b></a> is ready to be set up. ' +\n '<br/><br/><a href=\\'' +\n options.newInstance.uri +\n '\\'>Say when you what days work for you.</a>'\n })\n .catch(function (error) {\n complainIfBad(\n false,\n 'Error createing new scheduler at ' +\n options.newInstance +\n ': ' +\n error\n )\n })\n }\n\n // ///////////////////////\n\n const getForms = function () {\n console.log('getforms()')\n getDetails()\n /*\n fetcher.nowOrWhenFetched(formsURI, undefined, function (ok, body) {\n console.log('getforms() ok? ' + ok)\n if (!ok) return complainIfBad(ok, body)\n getDetails()\n })\n */\n }\n\n const getDetails = function () {\n console.log('getDetails()') // Looking for blank screen hang-up\n fetcher.nowOrWhenFetched(detailsDoc.uri, undefined, function (ok, body) {\n console.log('getDetails() ok? ' + ok)\n if (!ok) return complainIfBad(ok, body)\n showAppropriateDisplay()\n })\n }\n\n const showAppropriateDisplay = function showAppropriateDisplay () {\n console.log('showAppropriateDisplay()')\n\n authn.checkUser().then(webId => {\n if (!webId) {\n return showSignon()\n }\n\n // On gh-pages, the turtle will not load properly (bad mime type)\n // but we can trap it as being a non-editable server.\n\n if (\n !kb.updater.editable(detailsDoc.uri, kb) ||\n kb.holds(subject, ns.rdf('type'), ns.wf('TemplateInstance'))\n ) {\n // This is read-only example e.g. on github pages, etc\n showBootstrap()\n return\n }\n\n const ready = kb.any(subject, ns.sched('ready'))\n\n if (!ready) {\n showForms()\n } else {\n // no editing not author\n getResults()\n }\n })\n }\n\n const showSignon = function showSignon () {\n clearElement(naviMain)\n const signonContext = { div, dom }\n UI.login.ensureLoggedIn(signonContext).then(context => {\n me = context.me ?? null\n waitingForLogin = false // untested\n showAppropriateDisplay()\n })\n }\n\n const showBootstrap = function showBootstrap () {\n const div = clearElement(naviMain)\n div.appendChild(\n UI.login.newAppInstance(\n dom,\n { noun: 'poll', appPathSegment },\n function (workspace: string | null, newBase: string) {\n return initializeNewInstanceInWorkspace(\n $rdf.sym(workspace || newBase)\n )\n }\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 poll? ' +\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.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.classList.add('schedule-pane__button')\n button.textContent = 'Start new poll 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 // ///////////// The forms to configure the poll\n\n const doneButton = dom.createElement('button')\n\n const showForms = function () {\n clearElement(naviCenter) // Remove refresh button if nec\n const div = naviMain\n\n // form2 depends on sched:allDay; seed a local default for new polls\n if (!kb.any(subject, ns.sched('allDay'))) {\n kb.add(\n subject,\n ns.sched('allDay'),\n $rdf.literal('true', $rdf.sym('http://www.w3.org/2001/XMLSchema#boolean')),\n detailsDoc\n )\n }\n\n const wizard = true\n let currentSlide = 0\n let gotDoneButton = false\n\n const hasFormControls = function (container) {\n return !!container.querySelector('input, select, textarea, button')\n }\n\n const asBoolean = function (term, fallback) {\n if (!term) return fallback\n const value = (term.value || '').toLowerCase()\n if (value === 'true' || value === '1') return true\n if (value === 'false' || value === '0') return false\n return fallback\n }\n\n const renderTimeProposalFallback = function (slide) {\n const allDayValue = asBoolean(kb.any(subject, ns.sched('allDay')), true)\n const fallbackForm = kb.sym(\n formsURI + (allDayValue ? '#AllDayForm2' : '#NotAllDayForm2')\n )\n UI.widgets.appendForm(\n document,\n slide,\n {},\n subject,\n fallbackForm,\n detailsDoc,\n complainIfBad\n )\n }\n\n const annotateRenderedForm = function (\n container: HTMLElement,\n includePrimaryFields: boolean = false\n ) {\n const controls = Array.from(\n container.querySelectorAll('input, select, textarea')\n ) as HTMLElement[]\n controls.forEach(control => {\n control.classList.add('schedule-pane__form-control')\n if (control.tagName.toLowerCase() === 'textarea') {\n control.classList.add('schedule-pane__form-control--textarea')\n }\n })\n\n const borderedPanels = Array.from(\n container.querySelectorAll('div[style*=\"border: 0.05em solid\"]')\n ) as HTMLElement[]\n borderedPanels.forEach(panel => {\n panel.classList.add('schedule-pane__panel')\n })\n\n const headings = Array.from(container.querySelectorAll('h3')) as HTMLElement[]\n headings.forEach(heading => {\n heading.classList.add('schedule-pane__form-heading')\n const headingText = (heading.textContent || '').trim().toLowerCase()\n if (headingText === 'time proposals') {\n heading.classList.add('schedule-pane__form-heading--time-proposals')\n heading.closest('.schedule-pane__panel')?.classList.add(\n 'schedule-pane__panel--time-proposals'\n )\n }\n })\n\n if (!includePrimaryFields) {\n return\n }\n\n const labels = Array.from(container.querySelectorAll('.formFieldName'))\n labels.forEach(labelElement => {\n const row = labelElement.parentElement as HTMLElement | null\n const labelText = (labelElement.textContent || '').trim().toLowerCase()\n if (!row) return\n if (labelText === 'summary' || labelText === 'location') {\n row.classList.add('schedule-pane__field-row--compact')\n }\n if (labelText === 'comment') {\n row.classList.add('schedule-pane__field-row--comment')\n }\n })\n\n const commentField = container.querySelector('textarea') as HTMLTextAreaElement | null\n const commentFieldWrapper = commentField?.parentElement as HTMLElement | null\n const commentValueCell = commentFieldWrapper?.parentElement as HTMLElement | null\n const commentRow = commentValueCell?.parentElement as HTMLElement | null\n if (commentRow) {\n commentRow.classList.add('schedule-pane__field-row--comment')\n }\n if (commentValueCell) {\n commentValueCell.classList.add('schedule-pane__field-value--comment')\n }\n }\n\n const unwrapSlide = function (slide: HTMLElement) {\n const firstElement = slide.firstElementChild as HTMLElement | null\n if (!firstElement || slide.childElementCount !== 1) {\n return slide\n }\n return firstElement\n }\n\n if (wizard) {\n const forms = [form1, form2, form3]\n const slides: HTMLElement[] = []\n currentSlide = 0\n for (let f = 0; f < forms.length; f++) {\n const slide = dom.createElement('div')\n UI.widgets.appendForm(\n document,\n slide,\n {},\n subject,\n forms[f],\n detailsDoc,\n complainIfBad\n )\n annotateRenderedForm(slide, f === 0)\n\n // Some stores end up with form2's ui:Options unresolved; force a usable input form.\n if (f === 1 && !hasFormControls(slide)) {\n renderTimeProposalFallback(slide)\n annotateRenderedForm(slide)\n }\n\n slides.push(unwrapSlide(slide))\n }\n\n const refresh = function () {\n clearElement(naviMain).appendChild(slides[currentSlide])\n\n if (currentSlide === 0) {\n b1.setAttribute('disabled', '')\n } else {\n b1.removeAttribute('disabled')\n }\n if (currentSlide === slides.length - 1) {\n b2.setAttribute('disabled', '')\n if (!gotDoneButton) {\n // Only expose at last slide seen\n naviCenter.appendChild(emailButton) // could also check data shape\n naviCenter.appendChild(doneButton) // could also check data shape\n gotDoneButton = true\n }\n } else {\n b2.removeAttribute('disabled')\n }\n }\n const b1 = clearElement(naviLeft).appendChild(dom.createElement('button'))\n b1.classList.add('schedule-pane__button')\n b1.textContent = '<- go back'\n b1.addEventListener(\n 'click',\n function (_e) {\n if (currentSlide > 0) {\n currentSlide -= 1\n refresh()\n }\n },\n false\n )\n\n const b2 = clearElement(naviRight).appendChild(\n dom.createElement('button')\n )\n b2.classList.add('schedule-pane__button')\n b2.textContent = 'continue ->'\n b2.addEventListener(\n 'click',\n function (_e) {\n if (currentSlide < slides.length - 1) {\n currentSlide += 1\n refresh()\n }\n },\n false\n )\n\n refresh()\n } else {\n // not wizard one big form\n // @@@ create the initial config doc if not exist\n const table = div.appendChild(dom.createElement('table'))\n UI.widgets.appendForm(\n document,\n table,\n {},\n subject,\n form1,\n detailsDoc,\n complainIfBad\n )\n annotateRenderedForm(table, true)\n UI.widgets.appendForm(\n document,\n table,\n {},\n subject,\n form2,\n detailsDoc,\n complainIfBad\n )\n annotateRenderedForm(table)\n UI.widgets.appendForm(\n document,\n table,\n {},\n subject,\n form3,\n detailsDoc,\n complainIfBad\n )\n annotateRenderedForm(table)\n naviCenter.appendChild(doneButton) // could also check data shape\n }\n // @@@ link config to results\n\n const insertables: Statement[] = []\n insertables.push(\n $rdf.st(\n subject,\n ns.sched('availabilityOptions'),\n ns.sched('YesNoMaybe'),\n detailsDoc\n )\n )\n insertables.push(\n $rdf.st(\n subject,\n ns.sched('ready'),\n $rdf.literal(\n new Date().toISOString(),\n $rdf.sym('http://www.w3.org/2001/XMLSchema#dateTime')\n ),\n detailsDoc\n )\n )\n insertables.push(\n $rdf.st(subject, ns.sched('results'), resultsDoc, detailsDoc)\n ) // @@ also link in results\n\n doneButton.classList.add('schedule-pane__button')\n doneButton.textContent = 'Go to poll'\n doneButton.addEventListener(\n 'click',\n function (_e) {\n if (kb.any(subject, ns.sched('ready'))) {\n // already done\n getResults()\n naviRight.appendChild(emailButton)\n } else {\n naviRight.appendChild(emailButton)\n kb.updater.update([], insertables, function (\n uri,\n success,\n errorBody\n ) {\n if (!success) {\n complainIfBad(success, errorBody)\n } else {\n // naviRight.appendChild(emailButton)\n getResults()\n }\n })\n }\n },\n false\n )\n\n const emailButton = dom.createElement('button')\n emailButton.classList.add('schedule-pane__button')\n const emailIcon = emailButton.appendChild(dom.createElement('img'))\n emailIcon.setAttribute('src', UI.icons.iconBase + 'noun_480183.svg') // noun_480183.svg\n emailIcon.classList.add('schedule-pane__button-icon')\n // emailButton.textContent = 'email invitations'\n emailButton.addEventListener(\n 'click',\n function (_e) {\n const title =\n kb.anyValue(subject, ns.cal('summary')) ||\n kb.anyValue(subject, ns.dc('title')) ||\n ''\n const mailto =\n 'mailto:' +\n kb\n .each(subject, ns.sched('invitee'))\n .map(function (who) {\n const mbox = kb.any(who as NamedNode, ns.foaf('mbox')) as NamedNode | null\n return mbox ? mbox.uri.replace('mailto:', '') : ''\n })\n .join(',') +\n '?subject=' +\n encodeURIComponent(title + '-- When can we meet?') +\n '&body=' +\n encodeURIComponent(\n title + '\\n\\nWhen can you?\\n\\nSee ' + subject + '\\n'\n )\n // @@ assumed there is a data browser\n\n console.log('Mail: ' + mailto)\n window.location.href = mailto\n },\n false\n )\n } // showForms\n\n // Ask for each day, what times .. @@ to be added some time\n /*\n const setTimesOfDay = function () {\n const i, j, x, y, slot, cell, day\n const insertables = []\n const possibleDays = kb.each(invitation, ns.sched('option'))\n .map(function (opt) {return kb.any(opt, ns.cal('dtstart'))})\n const cellLookup = []\n const slots = kb.each(invitation, ns.sched('slot'))\n if (slots.length === 0) {\n for (i = 0; i < 2; i++) {\n slot = UI.widgets.newThing(detailsDoc)\n insertables.push($rdf.st(invitation, ns.sched('slot'), slot))\n insertables.push($rdf.st(slot, ns.rdfs('label'), 'slot ' + (i + 1)))\n for (j = 0; j < possibleDays.length; j++) {\n day - possibleDays[j]\n x = kb.any(slot, ns.rdfs('label'))\n y = kb.any(day, ns.cal('dtstart'))\n cell = UI.widgets.newThing(detailsDoc)\n cellLookup[x.toNT() + y.toNT()] = cell\n insertables.push($rdf.st(slot, ns.sched('cell'), cell))\n insertables.push($rdf.st(cell, ns.sched('day'), possibleDays[j]))\n }\n }\n }\n\n const query = new $rdf.Query('TimesOfDay')\n const v = {}['day', 'label', 'value', 'slot', 'cell'].map(function (x) {\n query.consts.push(v[x] = $rdf.constiable(x)) })\n query.pat.add(invitation, ns.sched('slot'), v.slot)\n query.pat.add(v.slot, ns.rdfs('label'), v.label)\n query.pat.add(v.slot, ns.sched('cell'), v.cell)\n query.pat.add(v.cell, ns.sched('timeOfDay'), v.value)\n query.pat.add(v.cell, ns.sched('day'), v.day)\n\n const options = {}\n options.set_x = kb.each(subject, ns.sched('slot')) // @@@@@ option -> dtstart in future\n options.set_x = options.set_x.map(function (opt) { return kb.any(opt, ns.rdfs('label')) })\n\n options.set_y = kb.each(subject, ns.sched('option')); // @@@@@ option -> dtstart in future\n options.set_y = options.set_y.map(function (opt) { return kb.any(opt, ns.cal('dtstart')) })\n\n const possibleTimes = kb.each(invitation, ns.sched('option'))\n .map(function (opt) { return kb.any(opt, ns.cal('dtstart')) })\n\n const displayTheMatrix = function () {\n const matrix = div.appendChild(UI.matrix.matrixForQuery(\n dom, query, v.time, v.author, v.value, options, function () {}))\n\n matrix.setAttribute('class', 'matrix')\n\n const refreshButton = dom.createElement('button')\n refreshButton.setAttribute('style', inputStyle)\n refreshButton.textContent = 'refresh'\n refreshButton.addEventListener('click', function (e) {\n refreshButton.disabled = true\n store.fetcher.nowOrWhenFetched(subject.doc(), undefined, function (ok, body) {\n if (!ok) {\n console.log('Cant refresh matrix' + body)\n } else {\n matrix.refresh()\n refreshButton.disabled = false\n }\n })\n }, false)\n\n clearElement(naviCenter)\n naviCenter.appendChild(refreshButton)\n }\n\n const dataPointForNT = []\n\n const doc = resultsDoc\n options.set_y = options.set_y.filter(function (z) { return (! z.sameTerm(me)) })\n options.set_y.push(me) // Put me on the end\n\n options.cellFunction = function (cell, x, y, value) {\n // const point = cellLookup[x.toNT() + y.toNT()]\n\n if (y.sameTerm(me)) {\n const callbackFunction = function () { refreshCellColor(cell, value); }; // @@ may need that\n const selectOptions = {}\n const predicate = ns.sched('timeOfDay')\n const cellSubject = dataPointForNT[x.toNT()]\n const selector = UI.widgets.makeSelectForOptions(dom, kb, cellSubject, predicate,\n possibleAvailabilities, selectOptions, resultsDoc, callbackFunction)\n cell.appendChild(selector)\n } else if (value !== null) {\n cell.textContent = UI.utils.label(value)\n }\n\n }\n\n const responses = kb.each(invitation, ns.sched('response'))\n const myResponse = null\n responses.map(function (r) {\n if (kb.holds(r, ns.dc('author'), me)) {\n myResponse = r\n }\n })\n\n const id = UI.widgets.newThing(doc).uri\n if (myResponse === null) {\n myResponse = $rdf.sym(id + '_response')\n insertables.push($rdf.st(invitation, ns.sched('response'), myResponse, doc))\n insertables.push($rdf.st(myResponse, ns.dc('author'), me, doc))\n } else {\n const dps = kb.each(myResponse, ns.sched('cell'))\n dps.map(function (dataPoint) {\n const time = kb.any(dataPoint, ns.cal('dtstart'))\n dataPointForNT[time.toNT()] = dataPoint\n })\n }\n for (let j = 0; j < possibleTimes.length; j++) {\n if (dataPointForNT[possibleTimes[j].toNT()]) continue\n const dataPoint = $rdf.sym(id + '_' + j)\n insertables.push($rdf.st(myResponse, ns.sched('cell'), dataPoint, doc))\n insertables.push($rdf.st(dataPoint, ns.cal('dtstart'), possibleTimes[j], doc)) // @@\n dataPointForNT[possibleTimes[j].toNT()] = dataPoint\n }\n if (insertables.length) {\n store.updater.update([], insertables, function (uri, success, errorBody) {\n if (!success) {\n complainIfBad(success, errorBody)\n } else {\n displayTheMatrix()\n }\n })\n } else { // no insertables\n displayTheMatrix()\n }\n }\n */\n // end setTimesOfDay\n\n // Read or create empty results file\n function getResults () {\n fetcher.nowOrWhenFetched(resultsDoc.uri, undefined, (ok, body, response) => {\n if (!ok) {\n if (response.status === 404) {\n // / Check explicitly for 404 error\n console.log('Initializing details file ' + resultsDoc)\n updater.put(resultsDoc, [], 'text/turtle', function (\n uri2,\n ok,\n message\n ) {\n if (ok) {\n clearElement(naviMain)\n showResults()\n } else {\n complainIfBad(\n ok,\n 'FAILED to create results file at: ' +\n resultsDoc.uri +\n ' : ' +\n message\n )\n console.log(\n 'FAILED to craete results file at: ' +\n resultsDoc.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 showResults()\n }\n })\n }\n\n function showResults () {\n // Now the form for responsing to the poll\n //\n\n // div.appendChild(dom.createElement('hr'))\n\n // const invitation = subject\n const title = kb.any(invitation, ns.cal('summary'))\n const comment = kb.any(invitation, ns.cal('comment'))\n const location = kb.any(invitation, ns.cal('location'))\n const div = naviMain\n if (title) div.appendChild(dom.createElement('h3')).textContent = title.value\n if (location) {\n div.appendChild(dom.createElement('address')).textContent =\n location.value\n }\n if (comment) {\n div.appendChild(dom.createElement('p')).textContent = comment.value\n }\n const author = kb.any(invitation, ns.dc('author')) as NamedNode | null\n if (author) {\n const authorName = kb.any(author, ns.foaf('name'))\n if (authorName) {\n div.appendChild(dom.createElement('p')).textContent = authorName.value\n }\n }\n\n const query = new $rdf.Query('Responses', 0)\n const v = {} as ResponseQueryVars\n v.time = $rdf.variable('time')\n v.author = $rdf.variable('author')\n v.value = $rdf.variable('value')\n v.resp = $rdf.variable('resp')\n v.cell = $rdf.variable('cell')\n query.vars.push(v.time, v.author, v.value, v.resp, v.cell)\n query.pat.add(invitation, ns.sched('response'), v.resp)\n query.pat.add(v.resp, ns.dc('author'), v.author)\n query.pat.add(v.resp, ns.sched('cell'), v.cell)\n query.pat.add(v.cell, ns.sched('availabilty'), v.value)\n query.pat.add(v.cell, ns.cal('dtstart'), v.time)\n\n // Sort by by person @@@\n\n const options: MatrixOptionsLike = { set_x: [], set_y: [] }\n options.set_x = kb.each(subject, ns.sched('option')) as RdflibNode[] // @@@@@ option -> dtstart in future\n options.set_x = options.set_x.map(function (opt) {\n return kb.any(opt as NamedNode, ns.cal('dtstart'))\n }).filter(function (time) {\n return !!time\n })\n\n options.set_y = kb.each(subject, ns.sched('response')) as RdflibNode[]\n options.set_y = options.set_y.map(function (resp) {\n return kb.any(resp as NamedNode, ns.dc('author'))\n }).filter(function (author) {\n return !!author\n })\n\n const possibleTimes = kb\n .each(invitation, ns.sched('option'))\n .map(function (opt) {\n return kb.any(opt as NamedNode, ns.cal('dtstart'))\n })\n .filter(function (time) {\n return !!time\n })\n\n const displayTheMatrix = function () {\n const matrix = div.appendChild(\n UI.matrix.matrixForQuery(\n dom,\n query,\n v.time,\n v.author,\n v.value,\n options,\n function () {}\n )\n )\n\n matrix.setAttribute('class', 'matrix')\n\n const refreshButton = dom.createElement('button')\n refreshButton.classList.add('schedule-pane__button')\n // refreshButton.textContent = 'refresh' // noun_479395.svg\n const refreshIcon = dom.createElement('img')\n refreshIcon.setAttribute('src', UI.icons.iconBase + 'noun_479395.svg')\n refreshIcon.classList.add('schedule-pane__button-icon')\n refreshButton.appendChild(refreshIcon)\n refreshButton.addEventListener(\n 'click',\n function (_e) {\n refreshButton.disabled = true\n kb.fetcher.refresh(resultsDoc, function (ok, body) {\n if (!ok) {\n console.log('Cant refresh matrix' + body)\n } else {\n matrix.refresh()\n refreshButton.disabled = false\n }\n })\n },\n false\n )\n\n clearElement(naviCenter)\n naviCenter.appendChild(refreshButton)\n }\n\n // @@ Give other combos too-- see schedule ontology\n // const possibleAvailabilities = [ SCHED('No'), SCHED('Maybe'), SCHED('Yes') ]\n\n // const me = authn.currentUser()\n\n const dataPointForNT: Record<string, NamedNode> = {}\n\n const loginContext = { div: naviCenter, dom }\n UI.login.ensureLoggedIn(loginContext).then(context => {\n const me = context.me\n if (!me) {\n return\n }\n const doc = resultsDoc\n options.set_y = options.set_y.filter(function (z) {\n return !z.sameTerm(me)\n })\n options.set_y.push(me) // Put me on the end\n\n options.cellFunction = function (cell, x, y, value) {\n if (value !== null) {\n kb.fetcher.nowOrWhenFetched(\n value.uri.split('#')[0],\n undefined,\n function (ok, _error) {\n if (ok) refreshCellColor(cell, value)\n }\n )\n }\n if (y.sameTerm(me)) {\n const callbackFunction = function () {\n refreshCellColor(cell, value)\n return ''\n } // @@ may need that\n const selectOptions = {}\n const predicate = ns.sched('availabilty')\n if (!x) return ''\n const cellSubject = dataPointForNT[x.toNT()]\n const selector = UI.widgets.makeSelectForOptions(\n dom,\n kb,\n cellSubject,\n predicate,\n possibleAvailabilities,\n selectOptions,\n resultsDoc,\n callbackFunction\n )\n cell.appendChild(selector)\n } else if (value !== null) {\n cell.textContent = UI.utils.label(value)\n }\n return ''\n }\n\n const responses = kb.each(invitation, ns.sched('response'))\n let myResponse: NamedNode | null = null\n responses.forEach(function (r) {\n if (kb.holds(r, ns.dc('author'), me)) {\n myResponse = r as NamedNode\n }\n })\n\n const insertables: Statement[] = [] // list of statements to be stored\n\n const id = UI.widgets.newThing(doc).uri\n if (myResponse === null) {\n myResponse = $rdf.sym(id + '_response')\n insertables.push(\n $rdf.st(invitation, ns.sched('response'), myResponse, doc)\n )\n insertables.push($rdf.st(myResponse, ns.dc('author'), me, doc))\n } else {\n const dps = kb.each(myResponse, ns.sched('cell'))\n dps.forEach(function (dataPoint) {\n const time = kb.any(dataPoint as NamedNode, ns.cal('dtstart'))\n if (!time) return\n dataPointForNT[time.toNT()] = dataPoint as NamedNode\n })\n }\n for (let j = 0; j < possibleTimes.length; j++) {\n const possibleTime = possibleTimes[j]\n if (!possibleTime) continue\n if (dataPointForNT[possibleTime.toNT()]) continue\n const dataPoint = $rdf.sym(id + '_' + j)\n insertables.push(\n $rdf.st(myResponse, ns.sched('cell'), dataPoint, doc)\n )\n insertables.push(\n $rdf.st(dataPoint, ns.cal('dtstart'), possibleTime, doc)\n ) // @@\n dataPointForNT[possibleTime.toNT()] = dataPoint\n }\n if (insertables.length) {\n kb.updater.update([], insertables, function (\n uri,\n success,\n errorBody\n ) {\n if (!success) {\n complainIfBad(success, errorBody)\n } else {\n displayTheMatrix()\n }\n })\n } else {\n // no insertables\n displayTheMatrix()\n }\n }) // @@@@ end of .then\n\n // If I made this in the first place, allow me to edit it.\n // @@ optionally -- allows others to if according to original\n const instanceCreator = kb.any(subject, ns.foaf('maker')) // owner?\n if (!instanceCreator || !me || instanceCreator.sameTerm(me)) {\n const editButton = dom.createElement('button')\n editButton.classList.add('schedule-pane__button')\n // editButton.textContent = '(Modify the poll)' // noun_344563.svg\n const editIcon = dom.createElement('img')\n editIcon.setAttribute('src', UI.icons.iconBase + 'noun_344563.svg')\n editIcon.classList.add('schedule-pane__button-icon')\n editButton.appendChild(editIcon)\n editButton.addEventListener(\n 'click',\n function (_e) {\n clearElement(div)\n showForms()\n },\n false\n )\n clearElement(naviLeft)\n naviLeft.appendChild(editButton)\n }\n\n // div.appendChild(editButton)\n\n clearElement(naviRight)\n naviRight.appendChild(newInstanceButton())\n } // showResults\n\n const div = dom.createElement('div')\n div.classList.add('schedule-pane')\n applyEnvironmentAttributes(div)\n const structure = div.appendChild(dom.createElement('table')) // @@ make responsive style\n structure.classList.add('schedule-pane__table')\n\n const logInOutButton: LoginStatusBoxLike | null = null\n /*\n const logInOutButton = UI.login.loginStatusBox(dom, setUser)\n // floating divs lead to a mess\n // logInOutButton.setAttribute('style', 'float: right') // float the beginning of the end\n naviLoginout3.appendChild(logInOutButton)\n logInOutButton.setAttribute('style', 'margin-right: 0em;')\n */\n\n const naviTop = structure.appendChild(dom.createElement('tr'))\n const naviMain = naviTop.appendChild(dom.createElement('td'))\n naviMain.classList.add('schedule-pane__main-cell')\n naviMain.setAttribute('colspan', '3')\n\n const naviMenu = structure.appendChild(dom.createElement('tr'))\n naviMenu.classList.add('naviMenu', 'schedule-pane__nav')\n const naviLeft = naviMenu.appendChild(dom.createElement('td'))\n const naviCenter = naviMenu.appendChild(dom.createElement('td'))\n const naviRight = naviMenu.appendChild(dom.createElement('td'))\n\n getForms()\n\n return div\n } // render\n} // property list\n// ends\n"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
let e=require("solid-ui");var t={icon:e.icons.iconBase+`padlock-timbl.svg`,name:`sharing`,label:(t,n)=>{let r=n.session.store.findTypeURIs(t);return r[e.ns.ldp(`Resource`).uri]||r[e.ns.ldp(`Container`).uri]||r[e.ns.ldp(`BasicContainer`).uri]?`Sharing`:null},render:(t,n)=>{let r=n.dom,i=n.session.store,a=s(),o=r.createElement(`div`);return o.classList.add(`sharingPane`),e.aclControl.preventBrowserDropEvents(r),o.appendChild(e.aclControl.ACLControlBox5(t,n,a,i)),o;function s(){let n=i.findTypeURIs(t);return n[e.ns.ldp(`BasicContainer`).uri]||n[e.ns.ldp(`Container`).uri]?`folder`:`file`}}};exports.default=t;
|
|
2
|
+
//# sourceMappingURL=sharingPane.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sharingPane.cjs.js","names":[],"sources":["../../src/sharing/sharingPane.ts"],"sourcesContent":["/* Sharing Pane\n **\n ** This outline pane allows a user to view and adjust the sharing -- access control lists\n ** for anything which has that capability.\n **\n ** I am using in places single quotes strings like 'this'\n ** where internationalization (\"i18n\") is not a problem, and double quoted\n ** like \"this\" where the string is seen by the user and so I18n is an issue.\n */\n\nimport { aclControl, icons, ns } from 'solid-ui'\n\nconst sharingPane = {\n icon: icons.iconBase + 'padlock-timbl.svg',\n\n name: 'sharing',\n\n label: (subject, context) => {\n const store = context.session.store\n const t = store.findTypeURIs(subject)\n if (t[ns.ldp('Resource').uri]) return 'Sharing' // @@ be more sophisticated?\n if (t[ns.ldp('Container').uri]) return 'Sharing' // @@ be more sophisticated?\n if (t[ns.ldp('BasicContainer').uri]) return 'Sharing' // @@ be more sophisticated?\n // check being allowed to see/change sharing?\n return null // No under other circumstances\n },\n\n render: (subject, context) => {\n const dom = context.dom\n const store = context.session.store\n const noun = getNoun()\n\n const div = dom.createElement('div')\n div.classList.add('sharingPane')\n aclControl.preventBrowserDropEvents(dom)\n div.appendChild(aclControl.ACLControlBox5(subject, context, noun, store))\n return div\n\n function getNoun () {\n const t = store.findTypeURIs(subject)\n if (t[ns.ldp('BasicContainer').uri] || t[ns.ldp('Container').uri]) {\n return 'folder'\n }\n return 'file'\n }\n }\n}\n\nexport default sharingPane\n"],"mappings":"0BAYA,IAAM,EAAc,CAClB,KAAM,EAAA,MAAM,SAAW,oBAEvB,KAAM,UAEN,OAAQ,EAAS,IAAY,CAE3B,IAAM,EADQ,EAAQ,QAAQ,MACd,aAAa,CAAO,EAKpC,OAJI,EAAE,EAAA,GAAG,IAAI,UAAU,CAAC,CAAC,MACrB,EAAE,EAAA,GAAG,IAAI,WAAW,CAAC,CAAC,MACtB,EAAE,EAAA,GAAG,IAAI,gBAAgB,CAAC,CAAC,KAAa,UAErC,IACT,EAEA,QAAS,EAAS,IAAY,CAC5B,IAAM,EAAM,EAAQ,IACd,EAAQ,EAAQ,QAAQ,MACxB,EAAO,EAAQ,EAEf,EAAM,EAAI,cAAc,KAAK,EAInC,OAHA,EAAI,UAAU,IAAI,aAAa,EAC/B,EAAA,WAAW,yBAAyB,CAAG,EACvC,EAAI,YAAY,EAAA,WAAW,eAAe,EAAS,EAAS,EAAM,CAAK,CAAC,EACjE,EAEP,SAAS,GAAW,CAClB,IAAM,EAAI,EAAM,aAAa,CAAO,EAIpC,OAHI,EAAE,EAAA,GAAG,IAAI,gBAAgB,CAAC,CAAC,MAAQ,EAAE,EAAA,GAAG,IAAI,WAAW,CAAC,CAAC,KACpD,SAEF,MACT,CACF,CACF"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { aclControl as e, icons as t, ns as n } from "solid-ui";
|
|
2
|
+
//#region src/sharing/sharingPane.ts
|
|
3
|
+
var r = {
|
|
4
|
+
icon: t.iconBase + "padlock-timbl.svg",
|
|
5
|
+
name: "sharing",
|
|
6
|
+
label: (e, t) => {
|
|
7
|
+
let r = t.session.store.findTypeURIs(e);
|
|
8
|
+
return r[n.ldp("Resource").uri] || r[n.ldp("Container").uri] || r[n.ldp("BasicContainer").uri] ? "Sharing" : null;
|
|
9
|
+
},
|
|
10
|
+
render: (t, r) => {
|
|
11
|
+
let i = r.dom, a = r.session.store, o = c(), s = i.createElement("div");
|
|
12
|
+
return s.classList.add("sharingPane"), e.preventBrowserDropEvents(i), s.appendChild(e.ACLControlBox5(t, r, o, a)), s;
|
|
13
|
+
function c() {
|
|
14
|
+
let e = a.findTypeURIs(t);
|
|
15
|
+
return e[n.ldp("BasicContainer").uri] || e[n.ldp("Container").uri] ? "folder" : "file";
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
//#endregion
|
|
20
|
+
export { r as default };
|
|
21
|
+
|
|
22
|
+
//# sourceMappingURL=sharingPane.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sharingPane.esm.js","names":[],"sources":["../../src/sharing/sharingPane.ts"],"sourcesContent":["/* Sharing Pane\n **\n ** This outline pane allows a user to view and adjust the sharing -- access control lists\n ** for anything which has that capability.\n **\n ** I am using in places single quotes strings like 'this'\n ** where internationalization (\"i18n\") is not a problem, and double quoted\n ** like \"this\" where the string is seen by the user and so I18n is an issue.\n */\n\nimport { aclControl, icons, ns } from 'solid-ui'\n\nconst sharingPane = {\n icon: icons.iconBase + 'padlock-timbl.svg',\n\n name: 'sharing',\n\n label: (subject, context) => {\n const store = context.session.store\n const t = store.findTypeURIs(subject)\n if (t[ns.ldp('Resource').uri]) return 'Sharing' // @@ be more sophisticated?\n if (t[ns.ldp('Container').uri]) return 'Sharing' // @@ be more sophisticated?\n if (t[ns.ldp('BasicContainer').uri]) return 'Sharing' // @@ be more sophisticated?\n // check being allowed to see/change sharing?\n return null // No under other circumstances\n },\n\n render: (subject, context) => {\n const dom = context.dom\n const store = context.session.store\n const noun = getNoun()\n\n const div = dom.createElement('div')\n div.classList.add('sharingPane')\n aclControl.preventBrowserDropEvents(dom)\n div.appendChild(aclControl.ACLControlBox5(subject, context, noun, store))\n return div\n\n function getNoun () {\n const t = store.findTypeURIs(subject)\n if (t[ns.ldp('BasicContainer').uri] || t[ns.ldp('Container').uri]) {\n return 'folder'\n }\n return 'file'\n }\n }\n}\n\nexport default sharingPane\n"],"mappings":";;AAYA,IAAM,IAAc;CAClB,MAAM,EAAM,WAAW;CAEvB,MAAM;CAEN,QAAQ,GAAS,MAAY;EAE3B,IAAM,IADQ,EAAQ,QAAQ,MACd,aAAa,CAAO;EAKpC,OAJI,EAAE,EAAG,IAAI,UAAU,CAAC,CAAC,QACrB,EAAE,EAAG,IAAI,WAAW,CAAC,CAAC,QACtB,EAAE,EAAG,IAAI,gBAAgB,CAAC,CAAC,OAAa,YAErC;CACT;CAEA,SAAS,GAAS,MAAY;EAC5B,IAAM,IAAM,EAAQ,KACd,IAAQ,EAAQ,QAAQ,OACxB,IAAO,EAAQ,GAEf,IAAM,EAAI,cAAc,KAAK;EAInC,OAHA,EAAI,UAAU,IAAI,aAAa,GAC/B,EAAW,yBAAyB,CAAG,GACvC,EAAI,YAAY,EAAW,eAAe,GAAS,GAAS,GAAM,CAAK,CAAC,GACjE;EAEP,SAAS,IAAW;GAClB,IAAM,IAAI,EAAM,aAAa,CAAO;GAIpC,OAHI,EAAE,EAAG,IAAI,gBAAgB,CAAC,CAAC,QAAQ,EAAE,EAAG,IAAI,WAAW,CAAC,CAAC,OACpD,WAEF;EACT;CACF;AACF"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=require("../_virtual/_rolldown/runtime.cjs.js");let t=require("solid-ui");t=e.__toESM(t);let n=require("@solid/better-simple-slideshow");n=e.__toESM(n);var r=t.ns,i={icon:t.icons.iconBase+`noun_138712.svg`,name:`slideshow`,audience:[r.solid(`PowerUser`)],label:function(e,n){let r=n.session.store,i=t.ns,a=r.findTypeURIs(e);if(a[i.ldp(`Container`).uri]||a[i.ldp(`BasicContainer`).uri]){let n=r.each(e,i.ldp(`contains`)),a=0;return n.forEach(function(e){t.widgets.isImage(e)&&a++}),a>0?`Slideshow`:null}return null},render:function(e,r){let i=r.dom;t.widgets.addStyleSheet(i,`https://leemark.github.io/better-simple-slideshow/css/simple-slideshow-styles.css`);let a=r.session.store,o=t.ns,s=i.createElement(`div`);s.setAttribute(`class`,`bss-slides`);let c=a.findTypeURIs(e),l;(c[o.ldp(`BasicContainer`).uri]||c[o.ldp(`Container`).uri])&&(l=o.ldp(`contains`));let u=a.each(e,l);u.sort();for(let e=0;e<u.length;e++){if(!t.widgets.isImage(u[e]))continue;let n=s.appendChild(i.createElement(`figure`)),r=n.appendChild(i.createElement(`img`));a.fetcher._fetch(u[e].uri).then(function(e){return e.blob()}).then(function(e){let t=URL.createObjectURL(e);r.setAttribute(`src`,t)}),r.style.width=`100%`,n.appendChild(i.createElement(`figcaption`))}let d={dom:i};return setTimeout(function(){(0,n.default)(`.bss-slides`,d)},1e3),s}};exports.slideshowPane=i;
|
|
2
|
+
//# sourceMappingURL=slideshowPane.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slideshowPane.cjs.js","names":["UI"],"sources":["../../src/slideshow/slideshowPane.js"],"sourcesContent":["/* slideshow Pane\n **\n */\nimport * as UI from 'solid-ui'\n\nimport makeBSS from '@solid/better-simple-slideshow'\nconst ns = UI.ns\n\nexport const slideshowPane = {\n icon: UI.icons.iconBase + 'noun_138712.svg',\n\n name: 'slideshow',\n\n audience: [ns.solid('PowerUser')],\n\n // Does the subject deserve an slideshow pane?\n label: function (subject, context) {\n const store = context.session.store\n const ns = UI.ns\n const t = store.findTypeURIs(subject)\n if (t[ns.ldp('Container').uri] || t[ns.ldp('BasicContainer').uri]) {\n const contents = store.each(subject, ns.ldp('contains'))\n let count = 0\n contents.forEach(function (file) {\n if (UI.widgets.isImage(file)) count++\n })\n return count > 0 ? 'Slideshow' : null\n }\n return null\n },\n\n // See https://github.com/leemark/better-simple-slideshow\n // and follow instructions there\n render: function (subject, context) {\n const dom = context.dom\n const styleSheet =\n 'https://leemark.github.io/better-simple-slideshow/css/simple-slideshow-styles.css'\n UI.widgets.addStyleSheet(dom, styleSheet)\n\n const store = context.session.store\n const ns = UI.ns\n const div = dom.createElement('div')\n div.setAttribute('class', 'bss-slides')\n\n const t = store.findTypeURIs(subject)\n let predicate\n if (t[ns.ldp('BasicContainer').uri] || t[ns.ldp('Container').uri]) {\n predicate = ns.ldp('contains')\n }\n const images = store.each(subject, predicate) // @@ random order?\n // @@ Ideally: sort by embedded time of image\n images.sort() // Sort for now by URI\n for (let i = 0; i < images.length; i++) {\n if (!UI.widgets.isImage(images[i])) continue\n const figure = div.appendChild(dom.createElement('figure'))\n const img = figure.appendChild(dom.createElement('img'))\n\n // get image with authenticated fetch\n store.fetcher._fetch(images[i].uri)\n .then(function (response) {\n return response.blob()\n })\n .then(function (myBlob) {\n const objectURL = URL.createObjectURL(myBlob)\n img.setAttribute('src', objectURL) // w640 h480 //\n })\n img.style.width = '100%'\n figure.appendChild(dom.createElement('figcaption'))\n }\n const options = { dom }\n\n setTimeout(function () {\n makeBSS('.bss-slides', options)\n }, 1000) // Must run after the code which called this\n\n return div\n }\n}\n\n// ends\n"],"mappings":"gKAMA,IAAM,EAAKA,EAAG,GAED,EAAgB,CAC3B,KAAMA,EAAG,MAAM,SAAW,kBAE1B,KAAM,YAEN,SAAU,CAAC,EAAG,MAAM,WAAW,CAAC,EAGhC,MAAO,SAAU,EAAS,EAAS,CACjC,IAAM,EAAQ,EAAQ,QAAQ,MACxB,EAAKA,EAAG,GACR,EAAI,EAAM,aAAa,CAAO,EACpC,GAAI,EAAE,EAAG,IAAI,WAAW,CAAC,CAAC,MAAQ,EAAE,EAAG,IAAI,gBAAgB,CAAC,CAAC,KAAM,CACjE,IAAM,EAAW,EAAM,KAAK,EAAS,EAAG,IAAI,UAAU,CAAC,EACnD,EAAQ,EAIZ,OAHA,EAAS,QAAQ,SAAU,EAAM,CAC3BA,EAAG,QAAQ,QAAQ,CAAI,GAAG,GAChC,CAAC,EACM,EAAQ,EAAI,YAAc,IACnC,CACA,OAAO,IACT,EAIA,OAAQ,SAAU,EAAS,EAAS,CAClC,IAAM,EAAM,EAAQ,IAGpB,EAAG,QAAQ,cAAc,EAAK,mFAAU,EAExC,IAAM,EAAQ,EAAQ,QAAQ,MACxB,EAAKA,EAAG,GACR,EAAM,EAAI,cAAc,KAAK,EACnC,EAAI,aAAa,QAAS,YAAY,EAEtC,IAAM,EAAI,EAAM,aAAa,CAAO,EAChC,GACA,EAAE,EAAG,IAAI,gBAAgB,CAAC,CAAC,MAAQ,EAAE,EAAG,IAAI,WAAW,CAAC,CAAC,QAC3D,EAAY,EAAG,IAAI,UAAU,GAE/B,IAAM,EAAS,EAAM,KAAK,EAAS,CAAS,EAE5C,EAAO,KAAK,EACZ,IAAK,IAAI,EAAI,EAAG,EAAI,EAAO,OAAQ,IAAK,CACtC,GAAI,CAACA,EAAG,QAAQ,QAAQ,EAAO,EAAE,EAAG,SACpC,IAAM,EAAS,EAAI,YAAY,EAAI,cAAc,QAAQ,CAAC,EACpD,EAAM,EAAO,YAAY,EAAI,cAAc,KAAK,CAAC,EAGvD,EAAM,QAAQ,OAAO,EAAO,EAAE,CAAC,GAAG,CAAC,CAChC,KAAK,SAAU,EAAU,CACxB,OAAO,EAAS,KAAK,CACvB,CAAC,CAAC,CACD,KAAK,SAAU,EAAQ,CACtB,IAAM,EAAY,IAAI,gBAAgB,CAAM,EAC5C,EAAI,aAAa,MAAO,CAAS,CACnC,CAAC,EACH,EAAI,MAAM,MAAQ,OAClB,EAAO,YAAY,EAAI,cAAc,YAAY,CAAC,CACpD,CACA,IAAM,EAAU,CAAE,KAAI,EAMtB,OAJA,WAAW,UAAY,EACrB,EAAA,EAAA,QAAA,CAAQ,cAAe,CAAO,CAChC,EAAG,GAAI,EAEA,CACT,CACF"}
|