solid-panes 3.7.3 → 4.0.0-cc645f25
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/dist/RDFXMLPane.js +59 -0
- package/dist/RDFXMLPane.js.map +1 -0
- package/{lib → dist}/argument/argumentPane.js +14 -15
- package/dist/argument/argumentPane.js.map +1 -0
- package/{lib → dist}/attach/attachPane.js +83 -93
- package/dist/attach/attachPane.js.map +1 -0
- package/{lib → dist}/audio/audioPane.js +49 -50
- package/dist/audio/audioPane.js.map +1 -0
- package/{lib → dist}/classInstancePane.js +23 -24
- package/dist/classInstancePane.js.map +1 -0
- package/dist/dashboard/basicPreferences.js +147 -0
- package/dist/dashboard/basicPreferences.js.map +1 -0
- package/{lib → dist}/dashboard/dashboardPane.js +17 -21
- package/dist/dashboard/dashboardPane.js.map +1 -0
- package/dist/dashboard/homepage.js +54 -0
- package/dist/dashboard/homepage.js.map +1 -0
- package/{lib → dist}/dataContentPane.js +64 -63
- package/dist/dataContentPane.js.map +1 -0
- package/{lib → dist}/defaultPane.js +15 -16
- package/dist/defaultPane.js.map +1 -0
- package/{lib → dist}/dokieli/dokieliPane.js +49 -53
- package/dist/dokieli/dokieliPane.js.map +1 -0
- package/{src → dist}/dokieli/new.js +9 -3
- package/dist/dokieli/new.js.map +1 -0
- package/{lib → dist}/form/pane.js +44 -45
- package/dist/form/pane.js.map +1 -0
- package/dist/home/homePane.js +73 -0
- package/dist/home/homePane.js.map +1 -0
- package/dist/humanReadablePane.js +135 -0
- package/dist/humanReadablePane.js.map +1 -0
- package/dist/imagePane.js +70 -0
- package/dist/imagePane.js.map +1 -0
- package/{lib → dist}/index.js +17 -20
- package/dist/index.js.map +1 -0
- package/{lib → dist}/internal/internalPane.js +41 -41
- package/dist/internal/internalPane.js.map +1 -0
- package/{lib → dist}/mainPage/footer.js +2 -2
- package/{lib → dist}/mainPage/footer.js.map +1 -1
- package/dist/mainPage/header.js +86 -0
- package/dist/mainPage/header.js.map +1 -0
- package/{lib → dist}/mainPage/index.d.ts.map +1 -1
- package/dist/mainPage/index.js +25 -0
- package/dist/mainPage/index.js.map +1 -0
- package/{lib → dist}/microblogPane/microblogPane.js +270 -270
- package/dist/microblogPane/microblogPane.js.map +1 -0
- package/dist/n3Pane.js +57 -0
- package/dist/n3Pane.js.map +1 -0
- package/{lib → dist}/outline/context.js +4 -4
- package/{lib → dist}/outline/context.js.map +1 -1
- package/dist/outline/manager.js +1997 -0
- package/dist/outline/manager.js.map +1 -0
- package/{lib → dist}/outline/outlineIcons.js +2 -3
- package/dist/outline/outlineIcons.js.map +1 -0
- package/{lib → dist}/outline/propertyViews.js +4 -4
- package/dist/outline/propertyViews.js.map +1 -0
- package/{lib → dist}/outline/queryByExample.js +33 -33
- package/dist/outline/queryByExample.js.map +1 -0
- package/{lib → dist}/outline/userInput.js +268 -266
- package/dist/outline/userInput.js.map +1 -0
- package/dist/outline/viewAsImage.js +15 -0
- package/dist/outline/viewAsImage.js.map +1 -0
- package/dist/outline/viewAsMbox.js +22 -0
- package/dist/outline/viewAsMbox.js.map +1 -0
- package/{lib → dist}/pad/padPane.js +90 -96
- package/dist/pad/padPane.js.map +1 -0
- package/{lib → dist}/playlist/playlistPane.js +36 -37
- package/dist/playlist/playlistPane.js.map +1 -0
- package/{lib → dist}/registerPanes.js +29 -29
- package/dist/registerPanes.js.map +1 -0
- package/{lib → dist}/schedule/schedulePane.js +171 -178
- package/dist/schedule/schedulePane.js.map +1 -0
- package/{lib → dist}/sharing/sharingPane.js +12 -12
- package/dist/sharing/sharingPane.js.map +1 -0
- package/dist/slideshow/slideshowPane.js +80 -0
- package/dist/slideshow/slideshowPane.js.map +1 -0
- package/{lib → dist}/socialPane.js +142 -142
- package/dist/socialPane.js.map +1 -0
- package/dist/tabbed/tabbedPane.js +58 -0
- package/dist/tabbed/tabbedPane.js.map +1 -0
- package/{lib → dist}/tableViewPane.js +8 -9
- package/dist/tableViewPane.js.map +1 -0
- package/{lib → dist}/transaction/pane.js +117 -118
- package/dist/transaction/pane.js.map +1 -0
- package/{lib → dist}/transaction/period.js +82 -83
- package/dist/transaction/period.js.map +1 -0
- package/{lib → dist}/trip/tripPane.js +47 -48
- package/dist/trip/tripPane.js.map +1 -0
- package/dist/trustedApplications/trustedApplications.dom.js +146 -0
- package/dist/trustedApplications/trustedApplications.dom.js.map +1 -0
- package/dist/trustedApplications/trustedApplications.utils.js +24 -0
- package/dist/trustedApplications/trustedApplications.utils.js.map +1 -0
- package/dist/trustedApplications/trustedApplications.view.js +56 -0
- package/dist/trustedApplications/trustedApplications.view.js.map +1 -0
- package/{lib → dist}/ui/pane.js +30 -31
- package/dist/ui/pane.js.map +1 -0
- package/dist/versionInfo.js +37 -0
- package/dist/versionInfo.js.map +1 -0
- package/dist/video/videoPane.js +43 -0
- package/dist/video/videoPane.js.map +1 -0
- package/package.json +46 -40
- package/Documentation/VisualLanguage.html +0 -538
- package/Documentation/conventions.md +0 -333
- package/coverage/clover.xml +0 -152
- package/coverage/coverage-final.json +0 -6
- package/coverage/lcov-report/base.css +0 -224
- package/coverage/lcov-report/block-navigation.js +0 -87
- package/coverage/lcov-report/favicon.png +0 -0
- package/coverage/lcov-report/index.html +0 -131
- package/coverage/lcov-report/outline/index.html +0 -161
- package/coverage/lcov-report/outline/outlineIcons.js.html +0 -565
- package/coverage/lcov-report/outline/propertyViews.ts.html +0 -196
- package/coverage/lcov-report/outline/viewAsImage.ts.html +0 -121
- package/coverage/lcov-report/outline/viewAsMbox.ts.html +0 -127
- package/coverage/lcov-report/prettify.css +0 -1
- package/coverage/lcov-report/prettify.js +0 -2
- package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/coverage/lcov-report/sorter.js +0 -210
- package/coverage/lcov-report/trustedApplications/index.html +0 -116
- package/coverage/lcov-report/trustedApplications/trustedApplications.utils.ts.html +0 -238
- package/coverage/lcov.info +0 -204
- package/dev/index.html +0 -28
- package/dev/loader.ts +0 -91
- package/dev/pane/index.ts +0 -10
- package/doc/images/panes-for-classes.epgz +0 -0
- package/doc/images/panes-for-classes.svg +0 -609
- package/eslint.config.mjs +0 -34
- package/jest.config.js +0 -27
- package/jest.setup.ts +0 -4
- package/lib/RDFXMLPane.js +0 -59
- package/lib/RDFXMLPane.js.map +0 -1
- package/lib/argument/argumentPane.js.map +0 -1
- package/lib/attach/attachPane.js.map +0 -1
- package/lib/audio/audioPane.js.map +0 -1
- package/lib/classInstancePane.js.map +0 -1
- package/lib/dashboard/basicPreferences.js +0 -229
- package/lib/dashboard/basicPreferences.js.map +0 -1
- package/lib/dashboard/dashboardPane.js.map +0 -1
- package/lib/dashboard/homepage.js +0 -86
- package/lib/dashboard/homepage.js.map +0 -1
- package/lib/dataContentPane.js.map +0 -1
- package/lib/defaultPane.js.map +0 -1
- package/lib/dokieli/dokieliPane.js.map +0 -1
- package/lib/dokieli/new.js +0 -9
- package/lib/dokieli/new.js.map +0 -1
- package/lib/form/pane.js.map +0 -1
- package/lib/global.d.js +0 -2
- package/lib/global.d.js.map +0 -1
- package/lib/home/homePane.js +0 -91
- package/lib/home/homePane.js.map +0 -1
- package/lib/humanReadablePane.js +0 -138
- package/lib/humanReadablePane.js.map +0 -1
- package/lib/imagePane.js +0 -71
- package/lib/imagePane.js.map +0 -1
- package/lib/index.js.map +0 -1
- package/lib/internal/internalPane.js.map +0 -1
- package/lib/mainPage/header.js +0 -152
- package/lib/mainPage/header.js.map +0 -1
- package/lib/mainPage/index.js +0 -42
- package/lib/mainPage/index.js.map +0 -1
- package/lib/microblogPane/microblogPane.js.map +0 -1
- package/lib/n3Pane.js +0 -57
- package/lib/n3Pane.js.map +0 -1
- package/lib/outline/manager.js +0 -2264
- package/lib/outline/manager.js.map +0 -1
- package/lib/outline/manager.test.d.ts +0 -2
- package/lib/outline/manager.test.d.ts.map +0 -1
- package/lib/outline/manager.test.js +0 -210
- package/lib/outline/manager.test.js.map +0 -1
- package/lib/outline/outlineIcons.js.map +0 -1
- package/lib/outline/propertyViews.js.map +0 -1
- package/lib/outline/propertyViews.test.d.ts +0 -2
- package/lib/outline/propertyViews.test.d.ts.map +0 -1
- package/lib/outline/propertyViews.test.js +0 -27
- package/lib/outline/propertyViews.test.js.map +0 -1
- package/lib/outline/queryByExample.js.map +0 -1
- package/lib/outline/userInput.js.map +0 -1
- package/lib/outline/viewAsImage.js +0 -17
- package/lib/outline/viewAsImage.js.map +0 -1
- package/lib/outline/viewAsMbox.js +0 -23
- package/lib/outline/viewAsMbox.js.map +0 -1
- package/lib/pad/padPane.js.map +0 -1
- package/lib/playlist/playlistPane.js.map +0 -1
- package/lib/registerPanes.js.map +0 -1
- package/lib/schedule/formsForSchedule.js +0 -8
- package/lib/schedule/formsForSchedule.js.map +0 -1
- package/lib/schedule/schedulePane.js.map +0 -1
- package/lib/sharing/sharingPane.js.map +0 -1
- package/lib/slideshow/slideshowPane.js +0 -84
- package/lib/slideshow/slideshowPane.js.map +0 -1
- package/lib/socialPane.js.map +0 -1
- package/lib/tabbed/tabbedPane.js +0 -72
- package/lib/tabbed/tabbedPane.js.map +0 -1
- package/lib/tableViewPane.js.map +0 -1
- package/lib/test-import-export/common.js +0 -12
- package/lib/test-import-export/common.js.map +0 -1
- package/lib/test-import-export/edit-importer.js +0 -25
- package/lib/test-import-export/edit-importer.js.map +0 -1
- package/lib/test-import-export/testImportExport.js +0 -2
- package/lib/test-import-export/testImportExport.js.map +0 -1
- package/lib/transaction/pane.js.map +0 -1
- package/lib/transaction/period.js.map +0 -1
- package/lib/trip/tripPane.js.map +0 -1
- package/lib/trustedApplications/trustedApplications.dom.js +0 -177
- package/lib/trustedApplications/trustedApplications.dom.js.map +0 -1
- package/lib/trustedApplications/trustedApplications.test.d.ts +0 -2
- package/lib/trustedApplications/trustedApplications.test.d.ts.map +0 -1
- package/lib/trustedApplications/trustedApplications.test.js +0 -64
- package/lib/trustedApplications/trustedApplications.test.js.map +0 -1
- package/lib/trustedApplications/trustedApplications.utils.js +0 -34
- package/lib/trustedApplications/trustedApplications.utils.js.map +0 -1
- package/lib/trustedApplications/trustedApplications.view.js +0 -87
- package/lib/trustedApplications/trustedApplications.view.js.map +0 -1
- package/lib/types.d.ts +0 -30
- package/lib/types.d.ts.map +0 -1
- package/lib/types.js +0 -6
- package/lib/types.js.map +0 -1
- package/lib/ui/pane.js.map +0 -1
- package/lib/versionInfo.d.ts +0 -32
- package/lib/versionInfo.d.ts.map +0 -1
- package/lib/versionInfo.js +0 -37
- package/lib/versionInfo.js.map +0 -1
- package/lib/video/videoPane.js +0 -44
- package/lib/video/videoPane.js.map +0 -1
- package/src/RDFXMLPane.js +0 -60
- package/src/argument/argumentPane.js +0 -65
- package/src/argument/argument_icon_v04.jpg +0 -0
- package/src/argument/icon_argument.png +0 -0
- package/src/argument/transparentyingyang.png +0 -0
- package/src/attach/attachPane.js +0 -508
- package/src/attach/tbl-paperclip-128.png +0 -0
- package/src/attach/tbl-paperclip-22.png +0 -0
- package/src/attach/tbl-paperclip-22a.png +0 -0
- package/src/audio/audioPane.js +0 -197
- package/src/chatPreferencesForm.ttl +0 -12
- package/src/classInstancePane.js +0 -110
- package/src/dashboard/basicPreferences.ts +0 -201
- package/src/dashboard/dashboardPane.ts +0 -83
- package/src/dashboard/homepage.ts +0 -72
- package/src/dashboard/languages/codes.html +0 -8611
- package/src/dashboard/languages/codes.xml +0 -3563
- package/src/dashboard/languages/codes2.txt +0 -170
- package/src/dashboard/languages/foo +0 -70
- package/src/dashboard/languages/foo.ttl +0 -0
- package/src/dashboard/languages/get-language-names.sh +0 -12
- package/src/dashboard/ontologyData.ttl +0 -35
- package/src/dashboard/preferencesFormText.ttl +0 -18
- package/src/dataContentPane.js +0 -290
- package/src/defaultPane.js +0 -102
- package/src/dokieli/Makefile +0 -6
- package/src/dokieli/dokieliPane.js +0 -190
- package/src/dokieli/new.html +0 -30
- package/src/form/form-22.png +0 -0
- package/src/form/form-b-22.png +0 -0
- package/src/form/form.graffle +0 -0
- package/src/form/form.png +0 -0
- package/src/form/pane.js +0 -217
- package/src/form/psuedocode-notes.txt +0 -57
- package/src/global.d.ts +0 -4
- package/src/home/homePane.ts +0 -72
- package/src/humanReadablePane.js +0 -150
- package/src/imagePane.js +0 -75
- package/src/index.ts +0 -71
- package/src/internal/internalPane.ts +0 -263
- package/src/mainPage/footer.ts +0 -19
- package/src/mainPage/header.ts +0 -79
- package/src/mainPage/index.ts +0 -20
- package/src/meeting/Makefile +0 -3
- package/src/meeting/test/meeting1/Actions/actions.ttl +0 -14
- package/src/meeting/test/meeting1/Actions/config.ttl +0 -16
- package/src/meeting/test/meeting1/Actions/state.ttl +0 -30
- package/src/meeting/test/meeting1/Schedule/details.ttl +0 -34
- package/src/meeting/test/meeting1/Schedule/details.ttl.acl +0 -20
- package/src/meeting/test/meeting1/Schedule/forms.ttl +0 -75
- package/src/meeting/test/meeting1/Schedule/forms.ttl.acl +0 -20
- package/src/meeting/test/meeting1/Schedule/index.html +0 -72
- package/src/meeting/test/meeting1/Schedule/index.html.acl +0 -20
- package/src/meeting/test/meeting1/Schedule/results.ttl +0 -15
- package/src/meeting/test/meeting1/Schedule/results.ttl.acl +0 -20
- package/src/meeting/test/meeting1/SharedNotes/pad.ttl +0 -23
- package/src/meeting/test/meeting1/chat/chat.ttl +0 -1
- package/src/meeting/test/meeting1/details.ttl +0 -35
- package/src/meeting/test/meeting1/pad/pad.ttl +0 -16
- package/src/microblogPane/mbStyle.css +0 -267
- package/src/microblogPane/microblogPane.js +0 -1412
- package/src/n3Pane.js +0 -56
- package/src/outline/context.ts +0 -21
- package/src/outline/manager.js +0 -2384
- package/src/outline/manager.test.ts +0 -189
- package/src/outline/outlineIcons.js +0 -160
- package/src/outline/propertyViews.test.ts +0 -36
- package/src/outline/propertyViews.ts +0 -37
- package/src/outline/queryByExample.js +0 -296
- package/src/outline/userInput.js +0 -2373
- package/src/outline/viewAsImage.ts +0 -12
- package/src/outline/viewAsMbox.ts +0 -14
- package/src/pad/images/ColourOff.ai +2 -872
- package/src/pad/images/ColourOff.png +0 -0
- package/src/pad/images/ColourOn.ai +1 -935
- package/src/pad/images/ColourOn.png +0 -0
- package/src/pad/padPane.ts +0 -559
- package/src/playlist/playlistPane.js +0 -161
- package/src/registerPanes.js +0 -147
- package/src/schedule/Makefile +0 -6
- package/src/schedule/formsForSchedule.js +0 -117
- package/src/schedule/formsForSchedule.ttl +0 -115
- package/src/schedule/schedulePane.js +0 -1201
- package/src/sharing/sharingPane.ts +0 -49
- package/src/slideshow/slideshowPane.js +0 -80
- package/src/socialPane.js +0 -523
- package/src/style/tabbedtab.css +0 -1347
- package/src/tabbed/tabbedPane.ts +0 -60
- package/src/tableViewPane.js +0 -51
- package/src/test-import-export/common.js +0 -6
- package/src/test-import-export/edit-importer.js +0 -20
- package/src/test-import-export/testImportExport.js +0 -0
- package/src/transaction/068010-3d-transparent-glass-icon-alphanumeric-dollar-sign.png +0 -0
- package/src/transaction/075988-3d-transparent-glass-icon-business-currency-british-pound-sc35.png +0 -0
- package/src/transaction/22-pixel-068010-3d-transparent-glass-icon-alphanumeric-dollar-sign.png +0 -0
- package/src/transaction/pane.js +0 -629
- package/src/transaction/period.js +0 -374
- package/src/transaction/thumbs_075987-3d-transparent-glass-icon-business-creditcard2.png +0 -0
- package/src/transaction/thumbs_075989-3d-transparent-glass-icon-business-currency-cent-sc35.png +0 -0
- package/src/trip/tripPane.js +0 -176
- package/src/trustedApplications/__snapshots__/trustedApplications.test.ts.snap +0 -176
- package/src/trustedApplications/trustedApplications.dom.ts +0 -276
- package/src/trustedApplications/trustedApplications.test.ts +0 -82
- package/src/trustedApplications/trustedApplications.utils.ts +0 -51
- package/src/trustedApplications/trustedApplications.view.ts +0 -80
- package/src/types.ts +0 -34
- package/src/ui/22-builder.png +0 -0
- package/src/ui/builder.graffle +0 -0
- package/src/ui/builder.png +0 -0
- package/src/ui/builder2.png +0 -0
- package/src/ui/pane.js +0 -226
- package/src/versionInfo.ts +0 -30
- package/src/video/videoPane.js +0 -44
- package/timestamp.sh +0 -13
- package/travis/bumpversion.js +0 -29
- package/tsconfig.json +0 -78
- package/typings/raw-loader.d.ts +0 -4
- package/typings/solid-namespace/index.d.ts +0 -9
- package/webpack.config.js +0 -41
- /package/{lib → dist}/dashboard/basicPreferences.d.ts +0 -0
- /package/{lib → dist}/dashboard/basicPreferences.d.ts.map +0 -0
- /package/{lib → dist}/dashboard/dashboardPane.d.ts +0 -0
- /package/{lib → dist}/dashboard/dashboardPane.d.ts.map +0 -0
- /package/{lib → dist}/dashboard/homepage.d.ts +0 -0
- /package/{lib → dist}/dashboard/homepage.d.ts.map +0 -0
- /package/{lib → dist}/home/homePane.d.ts +0 -0
- /package/{lib → dist}/home/homePane.d.ts.map +0 -0
- /package/{lib → dist}/index.d.ts +0 -0
- /package/{lib → dist}/index.d.ts.map +0 -0
- /package/{lib → dist}/internal/internalPane.d.ts +0 -0
- /package/{lib → dist}/internal/internalPane.d.ts.map +0 -0
- /package/{lib → dist}/mainPage/footer.d.ts +0 -0
- /package/{lib → dist}/mainPage/footer.d.ts.map +0 -0
- /package/{lib → dist}/mainPage/header.d.ts +0 -0
- /package/{lib → dist}/mainPage/header.d.ts.map +0 -0
- /package/{lib → dist}/mainPage/index.d.ts +0 -0
- /package/{lib → dist}/outline/context.d.ts +0 -0
- /package/{lib → dist}/outline/context.d.ts.map +0 -0
- /package/{lib → dist}/outline/propertyViews.d.ts +0 -0
- /package/{lib → dist}/outline/propertyViews.d.ts.map +0 -0
- /package/{lib → dist}/outline/viewAsImage.d.ts +0 -0
- /package/{lib → dist}/outline/viewAsImage.d.ts.map +0 -0
- /package/{lib → dist}/outline/viewAsMbox.d.ts +0 -0
- /package/{lib → dist}/outline/viewAsMbox.d.ts.map +0 -0
- /package/{lib → dist}/pad/padPane.d.ts +0 -0
- /package/{lib → dist}/pad/padPane.d.ts.map +0 -0
- /package/{lib → dist}/sharing/sharingPane.d.ts +0 -0
- /package/{lib → dist}/sharing/sharingPane.d.ts.map +0 -0
- /package/{lib → dist}/tabbed/tabbedPane.d.ts +0 -0
- /package/{lib → dist}/tabbed/tabbedPane.d.ts.map +0 -0
- /package/{lib → dist}/trustedApplications/trustedApplications.dom.d.ts +0 -0
- /package/{lib → dist}/trustedApplications/trustedApplications.dom.d.ts.map +0 -0
- /package/{lib → dist}/trustedApplications/trustedApplications.utils.d.ts +0 -0
- /package/{lib → dist}/trustedApplications/trustedApplications.utils.d.ts.map +0 -0
- /package/{lib → dist}/trustedApplications/trustedApplications.view.d.ts +0 -0
- /package/{lib → dist}/trustedApplications/trustedApplications.view.d.ts.map +0 -0
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports
|
|
6
|
+
exports.default = void 0;
|
|
7
7
|
var _solidUi = require("solid-ui");
|
|
8
8
|
var _solidLogic = require("solid-logic");
|
|
9
9
|
var _rdflib = require("rdflib");
|
|
@@ -11,29 +11,29 @@ var _rdflib = require("rdflib");
|
|
|
11
11
|
**
|
|
12
12
|
*/
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
const paneDef = {
|
|
15
15
|
// icon: (module.__dirname || __dirname) + 'images/ColourOn.png',
|
|
16
16
|
icon: _solidUi.icons.iconBase + 'noun_79217.svg',
|
|
17
17
|
name: 'pad',
|
|
18
18
|
audience: [_solidUi.ns.solid('PowerUser')],
|
|
19
19
|
// Does the subject deserve an pad pane?
|
|
20
|
-
label: function
|
|
21
|
-
|
|
20
|
+
label: function (subject, context) {
|
|
21
|
+
const t = context.session.store.findTypeURIs(subject);
|
|
22
22
|
if (t['http://www.w3.org/ns/pim/pad#Notepad']) {
|
|
23
23
|
return 'pad';
|
|
24
24
|
}
|
|
25
25
|
return null; // No under other circumstances
|
|
26
26
|
},
|
|
27
27
|
mintClass: _solidUi.ns.pad('Notepad'),
|
|
28
|
-
mintNew: function
|
|
29
|
-
|
|
30
|
-
|
|
28
|
+
mintNew: function (context, newPaneOptions) {
|
|
29
|
+
const store = context.session.store;
|
|
30
|
+
const updater = store.updater;
|
|
31
31
|
if (newPaneOptions.me && !newPaneOptions.me.uri) {
|
|
32
32
|
throw new Error('notepad mintNew: Invalid userid');
|
|
33
33
|
}
|
|
34
|
-
|
|
34
|
+
const newInstance = newPaneOptions.newInstance = newPaneOptions.newInstance || store.sym(newPaneOptions.newBase + 'index.ttl#this');
|
|
35
35
|
// const newInstance = kb.sym(newBase + 'pad.ttl#thisPad');
|
|
36
|
-
|
|
36
|
+
const newPadDoc = newInstance.doc();
|
|
37
37
|
store.add(newInstance, _solidUi.ns.rdf('type'), _solidUi.ns.pad('Notepad'), newPadDoc);
|
|
38
38
|
store.add(newInstance, _solidUi.ns.dc('title'), 'Shared Notes', newPadDoc);
|
|
39
39
|
store.add(newInstance, _solidUi.ns.dc('created'), new Date(), newPadDoc); // @@ TODO Remove casting
|
|
@@ -42,7 +42,7 @@ var paneDef = {
|
|
|
42
42
|
}
|
|
43
43
|
// kb.add(newInstance, ns.pad('next'), newInstance, newPadDoc);
|
|
44
44
|
// linked list empty @@
|
|
45
|
-
|
|
45
|
+
const chunk = store.sym(newInstance.uri + '_line0');
|
|
46
46
|
store.add(newInstance, _solidUi.ns.pad('next'), chunk, newPadDoc); // Linked list has one entry
|
|
47
47
|
store.add(chunk, _solidUi.ns.pad('next'), newInstance, newPadDoc);
|
|
48
48
|
store.add(chunk, _solidUi.ns.dc('author'), newPaneOptions.me, newPadDoc);
|
|
@@ -63,16 +63,16 @@ var paneDef = {
|
|
|
63
63
|
},
|
|
64
64
|
// and follow instructions there
|
|
65
65
|
// @@ TODO Set better type for paneOptions
|
|
66
|
-
render: function
|
|
67
|
-
|
|
68
|
-
|
|
66
|
+
render: function (subject, context, paneOptions) {
|
|
67
|
+
const dom = context.dom;
|
|
68
|
+
const store = context.session.store;
|
|
69
69
|
// Utility functions
|
|
70
|
-
|
|
70
|
+
const complainIfBad = function (ok, message) {
|
|
71
71
|
if (!ok) {
|
|
72
72
|
div.appendChild(_solidUi.widgets.errorMessageBlock(dom, message, 'pink'));
|
|
73
73
|
}
|
|
74
74
|
};
|
|
75
|
-
|
|
75
|
+
const clearElement = function (ele) {
|
|
76
76
|
while (ele.firstChild) {
|
|
77
77
|
ele.removeChild(ele.firstChild);
|
|
78
78
|
}
|
|
@@ -83,12 +83,12 @@ var paneDef = {
|
|
|
83
83
|
|
|
84
84
|
// Two constiations of ACL for this app, public read and public read/write
|
|
85
85
|
// In all cases owner has read write control
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
86
|
+
const genACLtext = function (docURI, aclURI, allWrite) {
|
|
87
|
+
const g = (0, _rdflib.graph)();
|
|
88
|
+
const auth = (0, _rdflib.Namespace)('http://www.w3.org/ns/auth/acl#');
|
|
89
|
+
let a = g.sym(aclURI + '#a1');
|
|
90
|
+
const acl = g.sym(aclURI);
|
|
91
|
+
const doc = g.sym(docURI);
|
|
92
92
|
g.add(a, _solidUi.ns.rdf('type'), auth('Authorization'), acl);
|
|
93
93
|
g.add(a, auth('accessTo'), doc, acl);
|
|
94
94
|
g.add(a, auth('agent'), me, acl);
|
|
@@ -114,39 +114,35 @@ var paneDef = {
|
|
|
114
114
|
*
|
|
115
115
|
* @returns {Promise<Response>}
|
|
116
116
|
*/
|
|
117
|
-
|
|
118
|
-
|
|
117
|
+
const setACL = function setACL(docURI, allWrite, callbackFunction) {
|
|
118
|
+
const aclDoc = store.any((0, _rdflib.sym)(docURI), (0, _rdflib.sym)('http://www.iana.org/assignments/link-relations/acl')); // @@ check that this get set by web.js
|
|
119
119
|
if (!fetcher) {
|
|
120
120
|
throw new Error('Have no fetcher');
|
|
121
121
|
}
|
|
122
122
|
if (aclDoc) {
|
|
123
123
|
// Great we already know where it is
|
|
124
|
-
|
|
124
|
+
const aclText = genACLtext(docURI, aclDoc.uri, allWrite);
|
|
125
125
|
return fetcher.webOperation('PUT', aclDoc.uri, {
|
|
126
126
|
data: aclText,
|
|
127
127
|
contentType: 'text/turtle'
|
|
128
|
-
}).then(
|
|
129
|
-
return callbackFunction(true);
|
|
130
|
-
})["catch"](function (err) {
|
|
128
|
+
}).then(() => callbackFunction(true)).catch(err => {
|
|
131
129
|
callbackFunction(false, err.message);
|
|
132
130
|
});
|
|
133
131
|
} else {
|
|
134
|
-
return fetcher.load(docURI)
|
|
132
|
+
return fetcher.load(docURI).catch(err => {
|
|
135
133
|
callbackFunction(false, 'Getting headers for ACL: ' + err);
|
|
136
|
-
}).then(
|
|
137
|
-
|
|
134
|
+
}).then(() => {
|
|
135
|
+
const aclDoc = store.any((0, _rdflib.sym)(docURI), (0, _rdflib.sym)('http://www.iana.org/assignments/link-relations/acl'));
|
|
138
136
|
if (!aclDoc) {
|
|
139
137
|
// complainIfBad(false, "No Link rel=ACL header for " + docURI);
|
|
140
138
|
throw new Error('No Link rel=ACL header for ' + docURI);
|
|
141
139
|
}
|
|
142
|
-
|
|
140
|
+
const aclText = genACLtext(docURI, aclDoc.uri, allWrite);
|
|
143
141
|
return fetcher.webOperation('PUT', aclDoc.uri, {
|
|
144
142
|
data: aclText,
|
|
145
143
|
contentType: 'text/turtle'
|
|
146
144
|
});
|
|
147
|
-
}).then(
|
|
148
|
-
return callbackFunction(true);
|
|
149
|
-
})["catch"](function (err) {
|
|
145
|
+
}).then(() => callbackFunction(true)).catch(err => {
|
|
150
146
|
callbackFunction(false, err.message);
|
|
151
147
|
});
|
|
152
148
|
}
|
|
@@ -155,8 +151,8 @@ var paneDef = {
|
|
|
155
151
|
// Reproduction: spawn a new instance
|
|
156
152
|
//
|
|
157
153
|
// Viral growth path: user of app decides to make another instance
|
|
158
|
-
|
|
159
|
-
|
|
154
|
+
const newInstanceButton = function () {
|
|
155
|
+
const button = div.appendChild(dom.createElement('button'));
|
|
160
156
|
button.textContent = 'Start another pad';
|
|
161
157
|
button.addEventListener('click', function () {
|
|
162
158
|
return showBootstrap(subject, spawnArea, 'pad');
|
|
@@ -165,21 +161,21 @@ var paneDef = {
|
|
|
165
161
|
};
|
|
166
162
|
|
|
167
163
|
// Option of either using the workspace system or just typing in a URI
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
164
|
+
const showBootstrap = function showBootstrap(thisInstance, container, noun) {
|
|
165
|
+
const div = clearElement(container);
|
|
166
|
+
const appDetails = {
|
|
171
167
|
noun: 'notepad'
|
|
172
168
|
};
|
|
173
|
-
div.appendChild(_solidUi.login.newAppInstance(dom, appDetails,
|
|
169
|
+
div.appendChild(_solidUi.login.newAppInstance(dom, appDetails, (workspace, newBase) => {
|
|
174
170
|
// FIXME: not sure if this will work at all, just
|
|
175
171
|
// trying to get the types to match - Michiel.
|
|
176
172
|
return initializeNewInstanceInWorkspace(new _rdflib.NamedNode(workspace || newBase));
|
|
177
173
|
}));
|
|
178
174
|
div.appendChild(dom.createElement('hr')); // @@
|
|
179
175
|
|
|
180
|
-
|
|
176
|
+
const p = div.appendChild(dom.createElement('p'));
|
|
181
177
|
p.textContent = 'Where would you like to store the data for the ' + noun + '? ' + 'Give the URL of the directory where you would like the data stored.';
|
|
182
|
-
|
|
178
|
+
const baseField = div.appendChild(dom.createElement('input'));
|
|
183
179
|
baseField.setAttribute('type', 'text');
|
|
184
180
|
baseField.size = 80 // really a string
|
|
185
181
|
;
|
|
@@ -187,10 +183,10 @@ var paneDef = {
|
|
|
187
183
|
baseField.autocomplete = 'on';
|
|
188
184
|
div.appendChild(dom.createElement('br')); // @@
|
|
189
185
|
|
|
190
|
-
|
|
186
|
+
const button = div.appendChild(dom.createElement('button'));
|
|
191
187
|
button.textContent = 'Start new ' + noun + ' at this URI';
|
|
192
188
|
button.addEventListener('click', function (_e) {
|
|
193
|
-
|
|
189
|
+
let newBase = baseField.value;
|
|
194
190
|
if (newBase.slice(-1) !== '/') {
|
|
195
191
|
newBase += '/';
|
|
196
192
|
}
|
|
@@ -199,9 +195,9 @@ var paneDef = {
|
|
|
199
195
|
};
|
|
200
196
|
|
|
201
197
|
// Create new document files for new instance of app
|
|
202
|
-
|
|
198
|
+
const initializeNewInstanceInWorkspace = function (ws) {
|
|
203
199
|
// @@ TODO Clean up type for newBase
|
|
204
|
-
|
|
200
|
+
let newBase = store.any(ws, _solidUi.ns.space('uriPrefix'));
|
|
205
201
|
if (!newBase) {
|
|
206
202
|
newBase = ws.uri.split('#')[0];
|
|
207
203
|
} else {
|
|
@@ -211,34 +207,34 @@ var paneDef = {
|
|
|
211
207
|
_rdflib.log.error(appPathSegment + ': No / at end of uriPrefix ' + newBase); // @@ paramater?
|
|
212
208
|
newBase = newBase + '/';
|
|
213
209
|
}
|
|
214
|
-
|
|
210
|
+
const now = new Date();
|
|
215
211
|
newBase += appPathSegment + '/id' + now.getTime() + '/'; // unique id
|
|
216
212
|
|
|
217
213
|
initializeNewInstanceAtBase(thisInstance, newBase);
|
|
218
214
|
};
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
215
|
+
const initializeNewInstanceAtBase = function (thisInstance, newBase) {
|
|
216
|
+
const here = (0, _rdflib.sym)(thisInstance.uri.split('#')[0]);
|
|
217
|
+
const base = here; // @@ ???
|
|
222
218
|
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
219
|
+
const newPadDoc = store.sym(newBase + 'pad.ttl');
|
|
220
|
+
const newIndexDoc = store.sym(newBase + 'index.html');
|
|
221
|
+
const toBeCopied = [{
|
|
226
222
|
local: 'index.html',
|
|
227
223
|
contentType: 'text/html'
|
|
228
224
|
}];
|
|
229
|
-
|
|
225
|
+
const newInstance = store.sym(newPadDoc.uri + '#thisPad');
|
|
230
226
|
|
|
231
227
|
// log.debug("\n Ready to put " + kb.statementsMatching(undefined, undefined, undefined, there)); //@@
|
|
232
228
|
|
|
233
|
-
|
|
234
|
-
|
|
229
|
+
const agenda = [];
|
|
230
|
+
let f; // @@ This needs some form of visible progress bar
|
|
235
231
|
for (f = 0; f < toBeCopied.length; f++) {
|
|
236
|
-
|
|
237
|
-
|
|
232
|
+
const item = toBeCopied[f];
|
|
233
|
+
const fun = function copyItem(item) {
|
|
238
234
|
agenda.push(function () {
|
|
239
|
-
|
|
235
|
+
const newURI = newBase + item.local;
|
|
240
236
|
console.log('Copying ' + base + item.local + ' to ' + newURI);
|
|
241
|
-
|
|
237
|
+
const setThatACL = function () {
|
|
242
238
|
setACL(newURI, false, function (ok, message) {
|
|
243
239
|
if (!ok) {
|
|
244
240
|
complainIfBad(ok, 'FAILED to set ACL ' + newURI + ' : ' + message);
|
|
@@ -251,12 +247,10 @@ var paneDef = {
|
|
|
251
247
|
if (!store.fetcher) {
|
|
252
248
|
throw new Error('Store has no fetcher');
|
|
253
249
|
}
|
|
254
|
-
store.fetcher.webCopy(base + item.local, newBase + item.local, item.contentType).then(
|
|
255
|
-
return _solidLogic.authn.checkUser();
|
|
256
|
-
}).then(function (webId) {
|
|
250
|
+
store.fetcher.webCopy(base + item.local, newBase + item.local, item.contentType).then(() => _solidLogic.authn.checkUser()).then(webId => {
|
|
257
251
|
me = webId;
|
|
258
252
|
setThatACL();
|
|
259
|
-
})
|
|
253
|
+
}).catch(err => {
|
|
260
254
|
console.log('FAILED to copy ' + base + item.local + ' : ' + err.message);
|
|
261
255
|
complainIfBad(false, 'FAILED to copy ' + base + item.local + ' : ' + err.message);
|
|
262
256
|
});
|
|
@@ -300,29 +294,29 @@ var paneDef = {
|
|
|
300
294
|
agenda.push(function () {
|
|
301
295
|
// give the user links to the new app
|
|
302
296
|
|
|
303
|
-
|
|
297
|
+
const p = div.appendChild(dom.createElement('p'));
|
|
304
298
|
p.setAttribute('style', 'font-size: 140%;');
|
|
305
|
-
p.innerHTML =
|
|
299
|
+
p.innerHTML = 'Your <a href=\'' + newIndexDoc.uri + '\'><b>new notepad</b></a> is ready. ' + '<br/><br/><a href=\'' + newIndexDoc.uri + '\'>Go to new pad</a>';
|
|
306
300
|
});
|
|
307
301
|
agenda.shift()();
|
|
308
302
|
// Created new data files.
|
|
309
303
|
};
|
|
310
304
|
|
|
311
305
|
// Update on incoming changes
|
|
312
|
-
|
|
306
|
+
const showResults = function (exists) {
|
|
313
307
|
console.log('showResults()');
|
|
314
308
|
me = _solidLogic.authn.currentUser();
|
|
315
|
-
_solidLogic.authn.checkUser().then(
|
|
309
|
+
_solidLogic.authn.checkUser().then(webId => {
|
|
316
310
|
me = webId;
|
|
317
311
|
});
|
|
318
|
-
|
|
312
|
+
const title = store.any(subject, _solidUi.ns.dc('title')) || store.any(subject, _solidUi.ns.vcard('fn'));
|
|
319
313
|
if (paneOptions.solo && typeof window !== 'undefined' && title) {
|
|
320
314
|
window.document.title = title.value;
|
|
321
315
|
}
|
|
322
316
|
options.exists = exists;
|
|
323
317
|
padEle = _solidUi.pad.notepad(dom, padDoc, subject, me, options);
|
|
324
318
|
naviMain.appendChild(padEle);
|
|
325
|
-
|
|
319
|
+
const partipationTarget = store.any(subject, _solidUi.ns.meeting('parentMeeting')) || subject;
|
|
326
320
|
_solidUi.pad.manageParticipation(dom, naviMiddle2, padDoc, partipationTarget, me, options);
|
|
327
321
|
if (!store.updater) {
|
|
328
322
|
throw new Error('Store has no updater');
|
|
@@ -331,7 +325,7 @@ var paneDef = {
|
|
|
331
325
|
};
|
|
332
326
|
|
|
333
327
|
// Read or create empty data file
|
|
334
|
-
|
|
328
|
+
const loadPadData = function () {
|
|
335
329
|
if (!fetcher) {
|
|
336
330
|
throw new Error('Have no fetcher');
|
|
337
331
|
}
|
|
@@ -369,43 +363,43 @@ var paneDef = {
|
|
|
369
363
|
};
|
|
370
364
|
|
|
371
365
|
// Body of Pane
|
|
372
|
-
|
|
366
|
+
const appPathSegment = 'app-pad.timbl.com'; // how to allocate this string and connect to
|
|
373
367
|
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
368
|
+
const fetcher = store.fetcher;
|
|
369
|
+
const updater = store.updater;
|
|
370
|
+
let me;
|
|
371
|
+
const PAD = (0, _rdflib.Namespace)('http://www.w3.org/ns/pim/pad#');
|
|
372
|
+
const thisInstance = subject;
|
|
373
|
+
const padDoc = subject.doc();
|
|
374
|
+
let padEle;
|
|
375
|
+
const div = dom.createElement('div');
|
|
382
376
|
|
|
383
377
|
// Build the DOM
|
|
384
|
-
|
|
378
|
+
const structure = div.appendChild(dom.createElement('table')); // @@ make responsive style
|
|
385
379
|
structure.setAttribute('style', 'background-color: white; min-width: 94%; margin-right:3% margin-left: 3%; min-height: 13em;');
|
|
386
|
-
|
|
380
|
+
const naviLoginoutTR = structure.appendChild(dom.createElement('tr'));
|
|
387
381
|
naviLoginoutTR.appendChild(dom.createElement('td')); // naviLoginout1
|
|
388
382
|
naviLoginoutTR.appendChild(dom.createElement('td'));
|
|
389
383
|
naviLoginoutTR.appendChild(dom.createElement('td'));
|
|
390
|
-
|
|
391
|
-
|
|
384
|
+
const naviTop = structure.appendChild(dom.createElement('tr')); // stuff
|
|
385
|
+
const naviMain = naviTop.appendChild(dom.createElement('td'));
|
|
392
386
|
naviMain.setAttribute('colspan', '3');
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
387
|
+
const naviMiddle = structure.appendChild(dom.createElement('tr')); // controls
|
|
388
|
+
const naviMiddle1 = naviMiddle.appendChild(dom.createElement('td'));
|
|
389
|
+
const naviMiddle2 = naviMiddle.appendChild(dom.createElement('td'));
|
|
390
|
+
const naviMiddle3 = naviMiddle.appendChild(dom.createElement('td'));
|
|
391
|
+
const naviStatus = structure.appendChild(dom.createElement('tr')); // status etc
|
|
392
|
+
const statusArea = naviStatus.appendChild(dom.createElement('div'));
|
|
393
|
+
const naviSpawn = structure.appendChild(dom.createElement('tr')); // create new
|
|
394
|
+
const spawnArea = naviSpawn.appendChild(dom.createElement('div'));
|
|
395
|
+
const naviMenu = structure.appendChild(dom.createElement('tr'));
|
|
402
396
|
naviMenu.setAttribute('class', 'naviMenu');
|
|
403
397
|
// naviMenu.setAttribute('style', 'margin-top: 3em;');
|
|
404
398
|
naviMenu.appendChild(dom.createElement('td')); // naviLeft
|
|
405
399
|
naviMenu.appendChild(dom.createElement('td'));
|
|
406
400
|
naviMenu.appendChild(dom.createElement('td'));
|
|
407
|
-
|
|
408
|
-
statusArea
|
|
401
|
+
const options = {
|
|
402
|
+
statusArea,
|
|
409
403
|
timingArea: naviMiddle1
|
|
410
404
|
};
|
|
411
405
|
loadPadData();
|
|
@@ -413,5 +407,5 @@ var paneDef = {
|
|
|
413
407
|
}
|
|
414
408
|
};
|
|
415
409
|
// ends
|
|
416
|
-
var _default = exports
|
|
410
|
+
var _default = exports.default = paneDef;
|
|
417
411
|
//# sourceMappingURL=padPane.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"padPane.js","names":["_solidUi","require","_solidLogic","_rdflib","paneDef","icon","icons","iconBase","name","audience","ns","solid","label","subject","context","t","session","store","findTypeURIs","mintClass","pad","mintNew","newPaneOptions","updater","me","uri","Error","newInstance","sym","newBase","newPadDoc","doc","add","rdf","dc","Date","chunk","sioc","Promise","resolve","reject","put","statementsMatching","undefined","uri2","ok","message","render","paneOptions","dom","complainIfBad","div","appendChild","widgets","errorMessageBlock","clearElement","ele","firstChild","removeChild","genACLtext","docURI","aclURI","allWrite","g","graph","auth","Namespace","a","acl","foaf","serialize","setACL","callbackFunction","aclDoc","any","fetcher","aclText","webOperation","data","contentType","then","catch","err","load","newInstanceButton","button","createElement","textContent","addEventListener","showBootstrap","spawnArea","thisInstance","container","noun","appDetails","login","newAppInstance","workspace","initializeNewInstanceInWorkspace","NamedNode","p","baseField","setAttribute","size","autocomplete","_e","value","slice","initializeNewInstanceAtBase","ws","space","split","log","error","appPathSegment","now","getTime","here","base","newIndexDoc","toBeCopied","local","agenda","f","length","item","fun","copyItem","push","newURI","console","setThatACL","shift","webCopy","authn","checkUser","webId","createNewPadDataFile","PAD","padDoc","_uri2","body","innerHTML","showResults","exists","currentUser","title","vcard","solo","window","document","options","padEle","notepad","naviMain","partipationTarget","meeting","manageParticipation","naviMiddle2","setRefreshHandler","reloadAndSync","loadPadData","nowOrWhenFetched","response","status","holds","wf","naviMiddle3","structure","naviLoginoutTR","naviTop","naviMiddle","naviMiddle1","naviStatus","statusArea","naviSpawn","naviMenu","timingArea","_default","exports","default"],"sources":["../../src/pad/padPane.ts"],"sourcesContent":["import { icons, ns, pad, widgets, login } from 'solid-ui'\nimport { authn, AppDetails } from 'solid-logic'\nimport { graph, log, NamedNode, Namespace, sym, serialize, Store } from 'rdflib'\nimport { PaneDefinition } from 'pane-registry'\n/* pad Pane\n **\n */\n\nconst paneDef: PaneDefinition = {\n // icon: (module.__dirname || __dirname) + 'images/ColourOn.png',\n icon: icons.iconBase + 'noun_79217.svg',\n\n name: 'pad',\n\n audience: [ns.solid('PowerUser')],\n\n // Does the subject deserve an pad pane?\n label: function (subject, context) {\n const t = (context.session.store as Store).findTypeURIs(subject)\n if (t['http://www.w3.org/ns/pim/pad#Notepad']) {\n return 'pad'\n }\n return null // No under other circumstances\n },\n\n mintClass: ns.pad('Notepad'),\n\n mintNew: function (context, newPaneOptions: any) {\n const store = context.session.store as Store\n const updater = store.updater\n if (newPaneOptions.me && !newPaneOptions.me.uri) {\n throw new Error('notepad mintNew: Invalid userid')\n }\n\n const newInstance = (newPaneOptions.newInstance =\n newPaneOptions.newInstance ||\n store.sym(newPaneOptions.newBase + 'index.ttl#this'))\n // const newInstance = kb.sym(newBase + 'pad.ttl#thisPad');\n const newPadDoc = newInstance.doc()\n\n store.add(newInstance, ns.rdf('type'), ns.pad('Notepad'), newPadDoc)\n store.add(newInstance, ns.dc('title'), 'Shared Notes', newPadDoc)\n store.add(newInstance, ns.dc('created'), new Date() as any, newPadDoc) // @@ TODO Remove casting\n if (newPaneOptions.me) {\n store.add(newInstance, ns.dc('author'), newPaneOptions.me, newPadDoc)\n }\n // kb.add(newInstance, ns.pad('next'), newInstance, newPadDoc);\n // linked list empty @@\n const chunk = store.sym(newInstance.uri + '_line0')\n store.add(newInstance, ns.pad('next'), chunk, newPadDoc) // Linked list has one entry\n store.add(chunk, ns.pad('next'), newInstance, newPadDoc)\n store.add(chunk, ns.dc('author'), newPaneOptions.me, newPadDoc)\n store.add(chunk, ns.sioc('content'), '', newPadDoc)\n\n return new Promise(function (resolve, reject) {\n if (!updater) {\n reject(new Error('Have no updater'))\n return\n }\n updater.put(\n newPadDoc,\n store.statementsMatching(undefined, undefined, undefined, newPadDoc),\n 'text/turtle',\n function (uri2, ok, message) {\n if (ok) {\n resolve(newPaneOptions)\n } else {\n reject(\n new Error('FAILED to save new tool at: ' + uri2 + ' : ' + message)\n )\n }\n }\n )\n })\n },\n // and follow instructions there\n // @@ TODO Set better type for paneOptions\n render: function (subject, context, paneOptions: any) {\n const dom = context.dom\n const store = context.session.store as Store\n // Utility functions\n const complainIfBad = function (ok: boolean, message: string) {\n if (!ok) {\n div.appendChild(widgets.errorMessageBlock(dom, message, 'pink'))\n }\n }\n\n const clearElement = function (ele: HTMLElement) {\n while (ele.firstChild) {\n ele.removeChild(ele.firstChild)\n }\n return ele\n }\n\n // Access control\n\n // Two constiations of ACL for this app, public read and public read/write\n // In all cases owner has read write control\n const genACLtext = function (\n docURI: string,\n aclURI: string,\n allWrite: boolean\n ) {\n const g = graph()\n const auth = Namespace('http://www.w3.org/ns/auth/acl#')\n let a = g.sym(aclURI + '#a1')\n const acl = g.sym(aclURI)\n const doc = g.sym(docURI)\n g.add(a, ns.rdf('type'), auth('Authorization'), acl)\n g.add(a, auth('accessTo'), doc, acl)\n g.add(a, auth('agent'), me, acl)\n g.add(a, auth('mode'), auth('Read'), acl)\n g.add(a, auth('mode'), auth('Write'), acl)\n g.add(a, auth('mode'), auth('Control'), acl)\n\n a = g.sym(aclURI + '#a2')\n g.add(a, ns.rdf('type'), auth('Authorization'), acl)\n g.add(a, auth('accessTo'), doc, acl)\n g.add(a, auth('agentClass'), ns.foaf('Agent'), acl)\n g.add(a, auth('mode'), auth('Read'), acl)\n if (allWrite) {\n g.add(a, auth('mode'), auth('Write'), acl)\n }\n // TODO: Figure out why `serialize` isn't on the type definition according to TypeScript:\n return serialize(acl, g, aclURI, 'text/turtle')\n }\n\n /**\n * @param docURI\n * @param allWrite\n * @param callbackFunction\n *\n * @returns {Promise<Response>}\n */\n const setACL = function setACL (\n docURI: string,\n allWrite: boolean,\n callbackFunction: Function\n ) {\n const aclDoc = store.any(\n sym(docURI),\n sym('http://www.iana.org/assignments/link-relations/acl')\n ) as NamedNode // @@ check that this get set by web.js\n if (!fetcher) {\n throw new Error('Have no fetcher')\n }\n if (aclDoc) {\n // Great we already know where it is\n const aclText = genACLtext(docURI, aclDoc.uri, allWrite)\n return fetcher\n .webOperation('PUT', aclDoc.uri, {\n data: aclText,\n contentType: 'text/turtle'\n })\n .then(() => callbackFunction(true))\n .catch(err => {\n callbackFunction(false, err.message)\n })\n } else {\n return fetcher\n .load(docURI)\n .catch((err: Error) => {\n callbackFunction(false, 'Getting headers for ACL: ' + err)\n })\n .then(() => {\n const aclDoc = store.any(\n sym(docURI),\n sym('http://www.iana.org/assignments/link-relations/acl')\n ) as NamedNode\n\n if (!aclDoc) {\n // complainIfBad(false, \"No Link rel=ACL header for \" + docURI);\n throw new Error('No Link rel=ACL header for ' + docURI)\n }\n\n const aclText = genACLtext(docURI, aclDoc.uri, allWrite)\n\n return fetcher.webOperation('PUT', aclDoc.uri, {\n data: aclText,\n contentType: 'text/turtle'\n })\n })\n .then(() => callbackFunction(true))\n .catch(err => {\n callbackFunction(false, err.message)\n })\n }\n }\n\n // Reproduction: spawn a new instance\n //\n // Viral growth path: user of app decides to make another instance\n const newInstanceButton = function () {\n const button = div.appendChild(dom.createElement('button'))\n button.textContent = 'Start another pad'\n button.addEventListener('click', function () {\n return showBootstrap(subject, spawnArea, 'pad')\n })\n return button\n }\n\n // Option of either using the workspace system or just typing in a URI\n const showBootstrap = function showBootstrap (\n thisInstance: any,\n container: HTMLElement,\n noun: string\n ) {\n const div = clearElement(container)\n const appDetails = { noun: 'notepad' } as AppDetails\n div.appendChild(\n login.newAppInstance(dom, appDetails, (workspace: string | null, newBase) => {\n // FIXME: not sure if this will work at all, just\n // trying to get the types to match - Michiel.\n return initializeNewInstanceInWorkspace(new NamedNode(workspace || newBase))\n })\n )\n\n div.appendChild(dom.createElement('hr')) // @@\n\n const p = div.appendChild(dom.createElement('p'))\n p.textContent =\n 'Where would you like to store the data for the ' +\n noun +\n '? ' +\n 'Give the URL of the directory where you would like the data stored.'\n const baseField = div.appendChild(dom.createElement('input'))\n baseField.setAttribute('type', 'text')\n baseField.size = 80 // really a string\n ;(baseField as any).label = 'base URL'\n baseField.autocomplete = 'on'\n\n div.appendChild(dom.createElement('br')) // @@\n\n const button = div.appendChild(dom.createElement('button'))\n button.textContent = 'Start new ' + noun + ' at this URI'\n button.addEventListener('click', function (_e) {\n let newBase = baseField.value\n if (newBase.slice(-1) !== '/') {\n newBase += '/'\n }\n initializeNewInstanceAtBase(thisInstance, newBase)\n })\n }\n\n // Create new document files for new instance of app\n const initializeNewInstanceInWorkspace = function (ws: NamedNode) {\n // @@ TODO Clean up type for newBase\n let newBase: any = store.any(ws, ns.space('uriPrefix'))\n if (!newBase) {\n newBase = ws.uri.split('#')[0]\n } else {\n newBase = newBase.value\n }\n if (newBase.slice(-1) !== '/') {\n log.error(appPathSegment + ': No / at end of uriPrefix ' + newBase) // @@ paramater?\n newBase = newBase + '/'\n }\n const now = new Date()\n newBase += appPathSegment + '/id' + now.getTime() + '/' // unique id\n\n initializeNewInstanceAtBase(thisInstance, newBase)\n }\n\n const initializeNewInstanceAtBase = function (\n thisInstance: any,\n newBase: string\n ) {\n const here = sym(thisInstance.uri.split('#')[0])\n const base = here // @@ ???\n\n const newPadDoc = store.sym(newBase + 'pad.ttl')\n const newIndexDoc = store.sym(newBase + 'index.html')\n\n const toBeCopied = [{ local: 'index.html', contentType: 'text/html' }]\n\n const newInstance = store.sym(newPadDoc.uri + '#thisPad')\n\n // log.debug(\"\\n Ready to put \" + kb.statementsMatching(undefined, undefined, undefined, there)); //@@\n\n const agenda: Function[] = []\n\n let f // @@ This needs some form of visible progress bar\n for (f = 0; f < toBeCopied.length; f++) {\n const item = toBeCopied[f]\n const fun = function copyItem (item: any) {\n agenda.push(function () {\n const newURI = newBase + item.local\n console.log('Copying ' + base + item.local + ' to ' + newURI)\n\n const setThatACL = function () {\n setACL(newURI, false, function (ok: boolean, message: string) {\n if (!ok) {\n complainIfBad(\n ok,\n 'FAILED to set ACL ' + newURI + ' : ' + message\n )\n console.log('FAILED to set ACL ' + newURI + ' : ' + message)\n } else {\n agenda.shift()!() // beware too much nesting\n }\n })\n }\n if (!store.fetcher) {\n throw new Error('Store has no fetcher')\n }\n store.fetcher\n .webCopy(\n base + item.local,\n newBase + item.local,\n item.contentType\n )\n .then(() => authn.checkUser())\n .then(webId => {\n me = webId\n\n setThatACL()\n })\n .catch(err => {\n console.log(\n 'FAILED to copy ' + base + item.local + ' : ' + err.message\n )\n complainIfBad(\n false,\n 'FAILED to copy ' + base + item.local + ' : ' + err.message\n )\n })\n })\n }\n fun(item)\n }\n\n agenda.push(function createNewPadDataFile () {\n store.add(newInstance, ns.rdf('type'), PAD('Notepad'), newPadDoc)\n\n // TODO @@ Remove casting of add\n store.add(\n newInstance,\n ns.dc('created'),\n new Date() as any, // @@ TODO Remove casting\n newPadDoc\n )\n if (me) {\n store.add(newInstance, ns.dc('author'), me, newPadDoc)\n }\n store.add(newInstance, PAD('next'), newInstance, newPadDoc) // linked list empty\n\n // Keep a paper trail @@ Revisit when we have non-public ones @@ Privacy\n store.add(newInstance, ns.space('inspiration'), thisInstance, padDoc)\n store.add(newInstance, ns.space('inspiration'), thisInstance, newPadDoc)\n if (!updater) {\n throw new Error('Have no updater')\n }\n updater.put(\n newPadDoc,\n store.statementsMatching(undefined, undefined, undefined, newPadDoc),\n 'text/turtle',\n function (_uri2, ok, message) {\n if (ok) {\n agenda.shift()!()\n } else {\n complainIfBad(\n ok,\n 'FAILED to save new notepad at: ' +\n newPadDoc.uri +\n ' : ' +\n message\n )\n console.log(\n 'FAILED to save new notepad at: ' +\n newPadDoc.uri +\n ' : ' +\n message\n )\n }\n }\n )\n })\n\n agenda.push(function () {\n setACL(newPadDoc.uri, true, function (ok: boolean, body: string) {\n complainIfBad(\n ok,\n 'Failed to set Read-Write ACL on pad data file: ' + body\n )\n if (ok) agenda.shift()!()\n })\n })\n\n agenda.push(function () {\n // give the user links to the new app\n\n const p = div.appendChild(dom.createElement('p'))\n p.setAttribute('style', 'font-size: 140%;')\n p.innerHTML =\n 'Your <a href=\\'' +\n newIndexDoc.uri +\n '\\'><b>new notepad</b></a> is ready. ' +\n '<br/><br/><a href=\\'' +\n newIndexDoc.uri +\n '\\'>Go to new pad</a>'\n })\n\n agenda.shift()!()\n // Created new data files.\n }\n\n // Update on incoming changes\n const showResults = function (exists: boolean) {\n console.log('showResults()')\n\n me = authn.currentUser()\n\n authn.checkUser().then((webId: unknown) => {\n me = webId as string\n })\n\n const title =\n store.any(subject, ns.dc('title')) || store.any(subject, ns.vcard('fn'))\n if (paneOptions.solo && typeof window !== 'undefined' && title) {\n window.document.title = title.value\n }\n options.exists = exists\n padEle = pad.notepad(dom, padDoc, subject, me, options)\n naviMain.appendChild(padEle)\n\n const partipationTarget =\n store.any(subject, ns.meeting('parentMeeting')) || subject\n pad.manageParticipation(\n dom,\n naviMiddle2,\n padDoc,\n partipationTarget as any,\n me,\n options\n )\n if (!store.updater) {\n throw new Error('Store has no updater')\n }\n\n store.updater.setRefreshHandler(padDoc, padEle.reloadAndSync) // initiated =\n }\n\n // Read or create empty data file\n const loadPadData = function () {\n if (!fetcher) {\n throw new Error('Have no fetcher')\n }\n fetcher.nowOrWhenFetched(padDoc.uri, undefined, function (\n ok: boolean,\n body: string,\n response: any\n ) {\n if (!ok) {\n if (response.status === 404) {\n // / Check explicitly for 404 error\n console.log('Initializing results file ' + padDoc)\n if (!updater) {\n throw new Error('Have no updater')\n }\n updater.put(padDoc, [], 'text/turtle', function (\n _uri2,\n ok,\n message\n ) {\n if (ok) {\n clearElement(naviMain)\n showResults(false)\n } else {\n complainIfBad(\n ok,\n 'FAILED to create results file at: ' +\n padDoc.uri +\n ' : ' +\n message\n )\n console.log(\n 'FAILED to craete results file at: ' +\n padDoc.uri +\n ' : ' +\n message\n )\n }\n })\n } else {\n // Other error, not 404 -- do not try to overwite the file\n complainIfBad(ok, 'FAILED to read results file: ' + body)\n }\n } else {\n // Happy read\n clearElement(naviMain)\n if (store.holds(subject, ns.rdf('type'), ns.wf('TemplateInstance'))) {\n showBootstrap(subject, naviMain, 'pad')\n }\n showResults(true)\n naviMiddle3.appendChild(newInstanceButton())\n }\n })\n }\n\n // Body of Pane\n const appPathSegment = 'app-pad.timbl.com' // how to allocate this string and connect to\n\n const fetcher = store.fetcher\n const updater = store.updater\n let me: any\n\n const PAD = Namespace('http://www.w3.org/ns/pim/pad#')\n\n const thisInstance = subject\n const padDoc = subject.doc()\n\n let padEle\n\n const div = dom.createElement('div')\n\n // Build the DOM\n const structure = div.appendChild(dom.createElement('table')) // @@ make responsive style\n structure.setAttribute(\n 'style',\n 'background-color: white; min-width: 94%; margin-right:3% margin-left: 3%; min-height: 13em;'\n )\n\n const naviLoginoutTR = structure.appendChild(dom.createElement('tr'))\n naviLoginoutTR.appendChild(dom.createElement('td')) // naviLoginout1\n naviLoginoutTR.appendChild(dom.createElement('td'))\n naviLoginoutTR.appendChild(dom.createElement('td'))\n\n const naviTop = structure.appendChild(dom.createElement('tr')) // stuff\n const naviMain = naviTop.appendChild(dom.createElement('td'))\n naviMain.setAttribute('colspan', '3')\n\n const naviMiddle = structure.appendChild(dom.createElement('tr')) // controls\n const naviMiddle1 = naviMiddle.appendChild(dom.createElement('td'))\n const naviMiddle2 = naviMiddle.appendChild(dom.createElement('td'))\n const naviMiddle3 = naviMiddle.appendChild(dom.createElement('td'))\n\n const naviStatus = structure.appendChild(dom.createElement('tr')) // status etc\n const statusArea = naviStatus.appendChild(dom.createElement('div'))\n\n const naviSpawn = structure.appendChild(dom.createElement('tr')) // create new\n const spawnArea = naviSpawn.appendChild(dom.createElement('div'))\n\n const naviMenu = structure.appendChild(dom.createElement('tr'))\n naviMenu.setAttribute('class', 'naviMenu')\n // naviMenu.setAttribute('style', 'margin-top: 3em;');\n naviMenu.appendChild(dom.createElement('td')) // naviLeft\n naviMenu.appendChild(dom.createElement('td'))\n naviMenu.appendChild(dom.createElement('td'))\n\n const options: any = { statusArea, timingArea: naviMiddle1 }\n\n loadPadData()\n\n return div\n }\n}\n// ends\n\nexport default paneDef\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,79 +1,78 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
4
3
|
Object.defineProperty(exports, "__esModule", {
|
|
5
4
|
value: true
|
|
6
5
|
});
|
|
7
|
-
exports
|
|
6
|
+
exports.default = void 0;
|
|
8
7
|
var UI = _interopRequireWildcard(require("solid-ui"));
|
|
9
8
|
var $rdf = _interopRequireWildcard(require("rdflib"));
|
|
10
|
-
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function
|
|
9
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
11
10
|
/* Playlist Pane
|
|
12
11
|
**
|
|
13
12
|
** This pane allows playlists and playlists slots to be viewed
|
|
14
13
|
** seeAlso: http://smiy.sourceforge.net/pbo/spec/playbackontology.html
|
|
15
14
|
*/
|
|
16
15
|
|
|
17
|
-
|
|
18
|
-
var _default = exports
|
|
16
|
+
const ns = UI.ns;
|
|
17
|
+
var _default = exports.default = {
|
|
19
18
|
icon: UI.icons.iconBase + 'noun_1619.svg',
|
|
20
19
|
name: 'playlistSlot',
|
|
21
20
|
audience: [ns.solid('PowerUser')],
|
|
22
|
-
label: function
|
|
23
|
-
|
|
21
|
+
label: function (subject, context) {
|
|
22
|
+
const kb = context.session.store;
|
|
24
23
|
if (!kb.anyStatementMatching(subject, UI.ns.rdf('type'), kb.sym('http://purl.org/ontology/pbo/core#PlaylistSlot'))) {
|
|
25
24
|
return null;
|
|
26
25
|
}
|
|
27
26
|
return 'playlist slot';
|
|
28
27
|
},
|
|
29
|
-
render: function
|
|
30
|
-
|
|
28
|
+
render: function (subject, context) {
|
|
29
|
+
const myDocument = context.dom;
|
|
31
30
|
function isVideo(src, _index) {
|
|
32
31
|
if (!src) {
|
|
33
32
|
return {
|
|
34
33
|
html5: true
|
|
35
34
|
};
|
|
36
35
|
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
36
|
+
const youtube = src.match(/\/\/(?:www\.)?youtu(?:\.be|be\.com)\/(?:watch\?v=|embed\/)?([a-z0-9\-_%]+)/i);
|
|
37
|
+
const vimeo = src.match(/\/\/(?:www\.)?vimeo.com\/([0-9a-z\-_]+)/i);
|
|
38
|
+
const dailymotion = src.match(/\/\/(?:www\.)?dai.ly\/([0-9a-z\-_]+)/i);
|
|
39
|
+
const vk = src.match(/\/\/(?:www\.)?(?:vk\.com|vkontakte\.ru)\/(?:video_ext\.php\?)(.*)/i);
|
|
41
40
|
if (youtube) {
|
|
42
41
|
return {
|
|
43
|
-
youtube
|
|
42
|
+
youtube
|
|
44
43
|
};
|
|
45
44
|
} else if (vimeo) {
|
|
46
45
|
return {
|
|
47
|
-
vimeo
|
|
46
|
+
vimeo
|
|
48
47
|
};
|
|
49
48
|
} else if (dailymotion) {
|
|
50
49
|
return {
|
|
51
|
-
dailymotion
|
|
50
|
+
dailymotion
|
|
52
51
|
};
|
|
53
52
|
} else if (vk) {
|
|
54
53
|
return {
|
|
55
|
-
vk
|
|
54
|
+
vk
|
|
56
55
|
};
|
|
57
56
|
}
|
|
58
57
|
}
|
|
59
|
-
|
|
58
|
+
const link = function (contents, uri) {
|
|
60
59
|
if (!uri) return contents;
|
|
61
|
-
|
|
60
|
+
const a = myDocument.createElement('a');
|
|
62
61
|
a.setAttribute('href', uri);
|
|
63
62
|
a.appendChild(contents);
|
|
64
63
|
a.addEventListener('click', UI.widgets.openHrefInOutlineMode, true);
|
|
65
64
|
return a;
|
|
66
65
|
};
|
|
67
|
-
|
|
66
|
+
const text = function (str) {
|
|
68
67
|
return myDocument.createTextNode(str);
|
|
69
68
|
};
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
69
|
+
const kb = context.session.store;
|
|
70
|
+
const obj = kb.any(subject, $rdf.sym('http://purl.org/ontology/pbo/core#playlist_item'));
|
|
71
|
+
let index = kb.any(subject, $rdf.sym('http://purl.org/ontology/olo/core#index'));
|
|
72
|
+
let uri = obj.uri;
|
|
73
|
+
const video = isVideo(uri);
|
|
74
|
+
const div = myDocument.createElement('div');
|
|
75
|
+
let img;
|
|
77
76
|
if (video && video.youtube) {
|
|
78
77
|
uri = uri.replace('watch?v=', 'embed/');
|
|
79
78
|
div.setAttribute('class', 'imageView');
|
|
@@ -92,28 +91,28 @@ var _default = exports["default"] = {
|
|
|
92
91
|
img.setAttribute('height', 315);
|
|
93
92
|
img.setAttribute('style', 'max-width: 560; max-height: 315;');
|
|
94
93
|
}
|
|
95
|
-
|
|
94
|
+
let descDiv;
|
|
96
95
|
if (index) {
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
for (
|
|
96
|
+
const sl = kb.statementsMatching(null, $rdf.sym('http://purl.org/ontology/olo/core#index'));
|
|
97
|
+
const slots = [];
|
|
98
|
+
for (let i = 0; i < sl.length; i++) {
|
|
100
99
|
if (sl[i]) {
|
|
101
100
|
slots.push(parseInt(sl[i].object.value, 10));
|
|
102
101
|
}
|
|
103
102
|
}
|
|
104
103
|
index = parseInt(index.value, 10);
|
|
105
104
|
descDiv = myDocument.createElement('div');
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
105
|
+
const pIndex = slots[(slots.indexOf(index) - 1 + slots.length) % slots.length];
|
|
106
|
+
const nIndex = slots[(slots.indexOf(index) + 1 + slots.length) % slots.length];
|
|
107
|
+
const prev = link(text('<<'), subject.uri.split('#')[0] + '#' + pIndex);
|
|
109
108
|
descDiv.appendChild(prev);
|
|
110
|
-
|
|
109
|
+
const indexDiv = myDocument.createElement('span');
|
|
111
110
|
indexDiv.innerHTML = ' Playlist slot : ' + index + ' ';
|
|
112
111
|
descDiv.appendChild(indexDiv);
|
|
113
|
-
|
|
112
|
+
const next = link(text('>>'), subject.uri.split('#')[0] + '#' + nIndex);
|
|
114
113
|
descDiv.appendChild(next);
|
|
115
114
|
}
|
|
116
|
-
|
|
115
|
+
const tr = myDocument.createElement('TR'); // why need tr?
|
|
117
116
|
tr.appendChild(img);
|
|
118
117
|
if (descDiv) {
|
|
119
118
|
tr.appendChild(descDiv);
|