solid-panes 3.5.27 → 3.5.28-59efa615
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.babelrc +0 -0
- package/.eslintignore +0 -0
- package/.eslintrc +0 -0
- package/.github/workflows/ci.yml +0 -0
- package/.nvmrc +0 -0
- package/Documentation/VisualLanguage.html +0 -0
- package/Documentation/conventions.md +0 -0
- package/LICENSE.md +0 -0
- package/README.md +0 -2
- package/dev/index.html +0 -0
- package/dev/loader.ts +0 -0
- package/dev/pane/index.ts +0 -0
- package/doc/images/panes-for-classes.epgz +0 -0
- package/doc/images/panes-for-classes.svg +0 -0
- package/jest.config.js +0 -0
- package/jest.setup.ts +0 -0
- package/lib/RDFXMLPane.js +15 -9
- package/lib/RDFXMLPane.js.map +1 -1
- package/lib/argument/argumentPane.js +12 -11
- package/lib/argument/argumentPane.js.map +1 -1
- package/lib/attach/attachPane.js +58 -90
- package/lib/attach/attachPane.js.map +1 -1
- package/lib/audio/audioPane.js +19 -37
- package/lib/audio/audioPane.js.map +1 -1
- package/lib/classInstancePane.js +21 -22
- package/lib/classInstancePane.js.map +1 -1
- package/lib/dashboard/basicPreferences.d.ts +0 -0
- package/lib/dashboard/basicPreferences.d.ts.map +0 -0
- package/lib/dashboard/basicPreferences.js +96 -154
- package/lib/dashboard/basicPreferences.js.map +1 -1
- package/lib/dashboard/dashboardPane.d.ts +0 -0
- package/lib/dashboard/dashboardPane.d.ts.map +0 -0
- package/lib/dashboard/dashboardPane.js +2 -18
- package/lib/dashboard/dashboardPane.js.map +1 -1
- package/lib/dashboard/homepage.d.ts +0 -0
- package/lib/dashboard/homepage.d.ts.map +0 -0
- package/lib/dashboard/homepage.js +27 -49
- package/lib/dashboard/homepage.js.map +1 -1
- package/lib/dataContentPane.js +26 -61
- package/lib/dataContentPane.js.map +1 -1
- package/lib/defaultPane.js +23 -23
- package/lib/defaultPane.js.map +1 -1
- package/lib/dokieli/dokieliPane.js +29 -34
- package/lib/dokieli/dokieliPane.js.map +1 -1
- package/lib/dokieli/new.js +6 -1
- package/lib/dokieli/new.js.map +1 -1
- package/lib/form/pane.js +34 -45
- package/lib/form/pane.js.map +1 -1
- package/lib/global.d.js +0 -0
- package/lib/global.d.js.map +0 -0
- package/lib/home/homePane.d.ts +0 -0
- package/lib/home/homePane.d.ts.map +0 -0
- package/lib/home/homePane.js +49 -67
- package/lib/home/homePane.js.map +1 -1
- package/lib/humanReadablePane.js +14 -28
- package/lib/humanReadablePane.js.map +1 -1
- package/lib/imagePane.js +19 -14
- package/lib/imagePane.js.map +1 -1
- package/lib/index.d.ts +0 -0
- package/lib/index.d.ts.map +0 -0
- package/lib/index.js +6 -20
- package/lib/index.js.map +1 -1
- package/lib/internal/internalPane.d.ts +0 -0
- package/lib/internal/internalPane.d.ts.map +0 -0
- package/lib/internal/internalPane.js +10 -41
- package/lib/internal/internalPane.js.map +1 -1
- package/lib/mainPage/footer.d.ts +0 -0
- package/lib/mainPage/footer.d.ts.map +0 -0
- package/lib/mainPage/footer.js +0 -4
- package/lib/mainPage/footer.js.map +1 -1
- package/lib/mainPage/header.d.ts +0 -0
- package/lib/mainPage/header.d.ts.map +0 -0
- package/lib/mainPage/header.js +66 -100
- package/lib/mainPage/header.js.map +1 -1
- package/lib/mainPage/index.d.ts +0 -0
- package/lib/mainPage/index.d.ts.map +0 -0
- package/lib/mainPage/index.js +17 -30
- package/lib/mainPage/index.js.map +1 -1
- package/lib/microblogPane/microblogPane.js +182 -321
- package/lib/microblogPane/microblogPane.js.map +1 -1
- package/lib/n3Pane.js +12 -8
- package/lib/n3Pane.js.map +1 -1
- package/lib/outline/context.d.ts +0 -0
- package/lib/outline/context.d.ts.map +0 -0
- package/lib/outline/context.js +0 -2
- package/lib/outline/context.js.map +1 -1
- package/lib/outline/licenseOptions.js +21 -35
- package/lib/outline/licenseOptions.js.map +1 -1
- package/lib/outline/manager.js +740 -1176
- package/lib/outline/manager.js.map +1 -1
- package/lib/outline/manager.test.js +16 -25
- package/lib/outline/manager.test.js.map +1 -1
- package/lib/outline/outlineIcons.js +39 -26
- package/lib/outline/outlineIcons.js.map +1 -1
- package/lib/outline/propertyViews.d.ts +3 -2
- package/lib/outline/propertyViews.d.ts.map +1 -1
- package/lib/outline/propertyViews.js +7 -15
- package/lib/outline/propertyViews.js.map +1 -1
- package/lib/outline/propertyViews.test.js +7 -7
- package/lib/outline/propertyViews.test.js.map +1 -1
- package/lib/outline/queryByExample.js +28 -80
- package/lib/outline/queryByExample.js.map +1 -1
- package/lib/outline/userInput.js +221 -459
- package/lib/outline/userInput.js.map +1 -1
- package/lib/outline/viewAsImage.d.ts +0 -0
- package/lib/outline/viewAsImage.d.ts.map +0 -0
- package/lib/outline/viewAsImage.js +0 -6
- package/lib/outline/viewAsImage.js.map +1 -1
- package/lib/outline/viewAsMbox.d.ts +0 -0
- package/lib/outline/viewAsMbox.d.ts.map +0 -0
- package/lib/outline/viewAsMbox.js +3 -4
- package/lib/outline/viewAsMbox.js.map +1 -1
- package/lib/pad/padPane.d.ts +0 -0
- package/lib/pad/padPane.d.ts.map +0 -0
- package/lib/pad/padPane.js +45 -93
- package/lib/pad/padPane.js.map +1 -1
- package/lib/playlist/playlistPane.js +11 -21
- package/lib/playlist/playlistPane.js.map +1 -1
- package/lib/profile/editProfile.view.d.ts +0 -0
- package/lib/profile/editProfile.view.d.ts.map +1 -1
- package/lib/profile/editProfile.view.js +22 -23
- package/lib/profile/editProfile.view.js.map +1 -1
- package/lib/profile/profile.dom.d.ts +0 -0
- package/lib/profile/profile.dom.d.ts.map +0 -0
- package/lib/profile/profile.dom.js +0 -3
- package/lib/profile/profile.dom.js.map +1 -1
- package/lib/registerPanes.js +99 -54
- package/lib/registerPanes.js.map +1 -1
- package/lib/schedule/formsForSchedule.js +6 -1
- package/lib/schedule/formsForSchedule.js.map +1 -1
- package/lib/schedule/schedulePane.js +71 -126
- package/lib/schedule/schedulePane.js.map +1 -1
- package/lib/sharing/sharingPane.d.ts +0 -0
- package/lib/sharing/sharingPane.d.ts.map +0 -0
- package/lib/sharing/sharingPane.js +2 -10
- package/lib/sharing/sharingPane.js.map +1 -1
- package/lib/slideshow/slideshowPane.js +21 -21
- package/lib/slideshow/slideshowPane.js.map +1 -1
- package/lib/socialPane.js +58 -135
- package/lib/socialPane.js.map +1 -1
- package/lib/tabbed/tabbedPane.d.ts +0 -0
- package/lib/tabbed/tabbedPane.d.ts.map +0 -0
- package/lib/tabbed/tabbedPane.js +32 -48
- package/lib/tabbed/tabbedPane.js.map +1 -1
- package/lib/tableViewPane.js +15 -9
- package/lib/tableViewPane.js.map +1 -1
- package/lib/test-import-export/common.js +8 -3
- package/lib/test-import-export/common.js.map +1 -1
- package/lib/test-import-export/edit-importer.js +10 -14
- package/lib/test-import-export/edit-importer.js.map +1 -1
- package/lib/test-import-export/testImportExport.js +0 -0
- package/lib/test-import-export/testImportExport.js.map +0 -0
- package/lib/transaction/pane.js +38 -91
- package/lib/transaction/pane.js.map +1 -1
- package/lib/transaction/period.js +27 -71
- package/lib/transaction/period.js.map +1 -1
- package/lib/trip/tripPane.js +38 -35
- package/lib/trip/tripPane.js.map +1 -1
- package/lib/trustedApplications/trustedApplications.dom.d.ts +0 -0
- package/lib/trustedApplications/trustedApplications.dom.d.ts.map +0 -0
- package/lib/trustedApplications/trustedApplications.dom.js +12 -35
- package/lib/trustedApplications/trustedApplications.dom.js.map +1 -1
- package/lib/trustedApplications/trustedApplications.test.js +6 -8
- package/lib/trustedApplications/trustedApplications.test.js.map +1 -1
- package/lib/trustedApplications/trustedApplications.utils.d.ts +0 -0
- package/lib/trustedApplications/trustedApplications.utils.d.ts.map +0 -0
- package/lib/trustedApplications/trustedApplications.utils.js +1 -11
- package/lib/trustedApplications/trustedApplications.utils.js.map +1 -1
- package/lib/trustedApplications/trustedApplications.view.d.ts +0 -0
- package/lib/trustedApplications/trustedApplications.view.d.ts.map +0 -0
- package/lib/trustedApplications/trustedApplications.view.js +38 -61
- package/lib/trustedApplications/trustedApplications.view.js.map +1 -1
- package/lib/types.d.ts +0 -0
- package/lib/types.d.ts.map +0 -0
- package/lib/types.js +0 -0
- package/lib/types.js.map +0 -0
- package/lib/ui/pane.js +30 -29
- package/lib/ui/pane.js.map +1 -1
- package/lib/versionInfo.d.ts +0 -0
- package/lib/versionInfo.d.ts.map +0 -0
- package/lib/versionInfo.js +14 -14
- package/lib/versionInfo.js.map +1 -1
- package/lib/video/videoPane.js +11 -7
- package/lib/video/videoPane.js.map +1 -1
- package/package.json +26 -26
- package/src/RDFXMLPane.js +2 -2
- package/src/argument/argumentPane.js +1 -1
- 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 +3 -3
- 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 +3 -3
- package/src/chatPreferencesForm.ttl +0 -0
- package/src/classInstancePane.js +3 -3
- package/src/dashboard/basicPreferences.ts +0 -0
- package/src/dashboard/dashboardPane.ts +0 -0
- package/src/dashboard/homepage.ts +0 -0
- package/src/dashboard/languages/codes.html +0 -0
- package/src/dashboard/languages/codes.xml +0 -0
- package/src/dashboard/languages/codes2.txt +0 -0
- package/src/dashboard/languages/foo +0 -0
- package/src/dashboard/languages/foo.ttl +0 -0
- package/src/dashboard/languages/get-language-names.sh +0 -0
- package/src/dashboard/ontologyData.ttl +0 -0
- package/src/dashboard/preferencesFormText.ttl +0 -0
- package/src/dataContentPane.js +3 -4
- package/src/defaultPane.js +3 -3
- package/src/dokieli/Makefile +0 -0
- package/src/dokieli/dokieliPane.js +5 -5
- package/src/dokieli/new.html +0 -0
- package/src/dokieli/new.js +1 -1
- 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 +2 -2
- package/src/form/psuedocode-notes.txt +0 -0
- package/src/global.d.ts +0 -0
- package/src/home/homePane.ts +0 -0
- package/src/humanReadablePane.js +0 -0
- package/src/imagePane.js +2 -2
- package/src/index.ts +1 -1
- package/src/internal/internalPane.ts +0 -0
- package/src/mainPage/footer.ts +0 -0
- package/src/mainPage/header.ts +0 -0
- package/src/mainPage/index.ts +0 -0
- package/src/meeting/Makefile +0 -0
- package/src/meeting/test/meeting1/Actions/actions.ttl +0 -0
- package/src/meeting/test/meeting1/Actions/config.ttl +0 -0
- package/src/meeting/test/meeting1/Actions/state.ttl +0 -0
- package/src/meeting/test/meeting1/Schedule/details.ttl +0 -0
- package/src/meeting/test/meeting1/Schedule/details.ttl.acl +0 -0
- package/src/meeting/test/meeting1/Schedule/forms.ttl +0 -0
- package/src/meeting/test/meeting1/Schedule/forms.ttl.acl +0 -0
- package/src/meeting/test/meeting1/Schedule/index.html +0 -0
- package/src/meeting/test/meeting1/Schedule/index.html.acl +0 -0
- package/src/meeting/test/meeting1/Schedule/results.ttl +0 -0
- package/src/meeting/test/meeting1/Schedule/results.ttl.acl +0 -0
- package/src/meeting/test/meeting1/SharedNotes/pad.ttl +0 -0
- package/src/meeting/test/meeting1/chat/chat.ttl +0 -0
- package/src/meeting/test/meeting1/details.ttl +0 -0
- package/src/meeting/test/meeting1/pad/pad.ttl +0 -0
- package/src/microblogPane/mbStyle.css +0 -0
- package/src/microblogPane/microblogPane.js +1 -1
- package/src/n3Pane.js +2 -2
- package/src/outline/context.ts +0 -0
- package/src/outline/licenseOptions.js +9 -8
- package/src/outline/manager.js +18 -20
- package/src/outline/manager.test.ts +6 -0
- package/src/outline/outlineIcons.js +4 -2
- package/src/outline/propertyViews.test.ts +7 -1
- package/src/outline/propertyViews.ts +3 -3
- package/src/outline/queryByExample.js +3 -9
- package/src/outline/userInput.js +1 -1
- package/src/outline/viewAsImage.ts +0 -0
- package/src/outline/viewAsMbox.ts +0 -0
- package/src/pad/images/ColourOff.ai +0 -0
- package/src/pad/images/ColourOff.png +0 -0
- package/src/pad/images/ColourOn.ai +0 -0
- package/src/pad/images/ColourOn.png +0 -0
- package/src/pad/padPane.ts +0 -0
- package/src/playlist/playlistPane.js +3 -3
- package/src/profile/editProfile.view.ts +20 -0
- package/src/profile/profile.dom.ts +0 -0
- package/src/profile/profileFormText.ttl +0 -0
- package/src/registerPanes.js +92 -52
- package/src/schedule/Makefile +0 -0
- package/src/schedule/formsForSchedule.js +1 -1
- package/src/schedule/formsForSchedule.ttl +0 -0
- package/src/schedule/schedulePane.js +6 -2
- package/src/sharing/sharingPane.ts +0 -0
- package/src/slideshow/slideshowPane.js +3 -6
- package/src/socialPane.js +4 -5
- package/src/style/tabbedtab.css +0 -0
- package/src/tabbed/tabbedPane.ts +0 -0
- package/src/tableViewPane.js +3 -3
- package/src/test-import-export/common.js +1 -1
- package/src/test-import-export/edit-importer.js +5 -10
- 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 +3 -3
- package/src/transaction/period.js +2 -2
- 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 +3 -3
- package/src/trustedApplications/__snapshots__/trustedApplications.test.ts.snap +0 -0
- package/src/trustedApplications/trustedApplications.dom.ts +0 -0
- package/src/trustedApplications/trustedApplications.test.ts +4 -0
- package/src/trustedApplications/trustedApplications.utils.ts +0 -0
- package/src/trustedApplications/trustedApplications.view.ts +0 -0
- package/src/types.ts +0 -0
- 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 +3 -3
- package/src/versionInfo.ts +14 -14
- package/src/video/videoPane.js +3 -3
- package/timestamp.sh +0 -0
- package/travis/bumpversion.js +0 -0
- package/tsconfig.json +0 -0
- package/typings/raw-loader.d.ts +0 -0
- package/typings/solid-namespace/index.d.ts +0 -0
- package/webpack.config.js +0 -0
package/lib/audio/audioPane.js
CHANGED
|
@@ -1,14 +1,20 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports["default"] = void 0;
|
|
8
|
+
var UI = _interopRequireWildcard(require("solid-ui"));
|
|
9
|
+
var $rdf = _interopRequireWildcard(require("rdflib"));
|
|
10
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
11
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
3
12
|
/* Single audio play Pane
|
|
4
13
|
**
|
|
5
14
|
*/
|
|
6
|
-
var UI = require('solid-ui');
|
|
7
|
-
|
|
8
|
-
var $rdf = require('rdflib');
|
|
9
15
|
|
|
10
16
|
var ns = UI.ns;
|
|
11
|
-
|
|
17
|
+
var _default = {
|
|
12
18
|
icon: UI.icons.iconBase + 'noun_534313.svg',
|
|
13
19
|
name: 'audio',
|
|
14
20
|
// Does the subject deserve an audio play pane?
|
|
@@ -16,11 +22,9 @@ module.exports = {
|
|
|
16
22
|
var kb = context.session.store;
|
|
17
23
|
var typeURIs = kb.findTypeURIs(subject);
|
|
18
24
|
var prefix = $rdf.Util.mediaTypeClass('audio/*').uri.split('*')[0];
|
|
19
|
-
|
|
20
25
|
for (var t in typeURIs) {
|
|
21
26
|
if (t.startsWith(prefix)) return 'Play audio';
|
|
22
27
|
}
|
|
23
|
-
|
|
24
28
|
return null;
|
|
25
29
|
},
|
|
26
30
|
render: function render(subject, context) {
|
|
@@ -32,46 +36,39 @@ module.exports = {
|
|
|
32
36
|
chainAlbums: true,
|
|
33
37
|
loop: false
|
|
34
38
|
};
|
|
35
|
-
|
|
36
39
|
var removeExtension = function removeExtension(str) {
|
|
37
40
|
var dot = str.lastIndexOf('.');
|
|
38
41
|
if (dot < 0) return str; // if any
|
|
39
|
-
|
|
40
42
|
var slash = str.lastIndexOf('/');
|
|
41
43
|
if (dot < slash) return str;
|
|
42
44
|
return str.slice(0, dot);
|
|
43
|
-
};
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
// True if there is another file like song.mp3 when this is "song 1.mp3"
|
|
44
48
|
// or this is song.m4a
|
|
45
49
|
//
|
|
46
|
-
|
|
47
|
-
|
|
48
50
|
var looksRedundant = function looksRedundant(x) {
|
|
49
51
|
var folder = kb.any(undefined, ns.ldp('contains'), x);
|
|
50
52
|
if (!folder) return false;
|
|
51
53
|
var contents = kb.each(folder, ns.ldp('contains'));
|
|
52
54
|
if (contents.length < 2) return false;
|
|
53
55
|
var thisName = x.uri;
|
|
54
|
-
|
|
55
56
|
for (var k = 0; k < contents.length; k++) {
|
|
56
57
|
var otherName = contents[k].uri;
|
|
57
|
-
|
|
58
58
|
if (thisName.length > otherName.length && thisName.startsWith(removeExtension(otherName))) {
|
|
59
59
|
return true;
|
|
60
60
|
}
|
|
61
|
-
|
|
62
61
|
if (thisName.endsWith('.m4a') && otherName.endsWith('.mp3') && removeExtension(thisName) === removeExtension(otherName)) {
|
|
63
62
|
return true;
|
|
64
63
|
}
|
|
65
64
|
}
|
|
66
|
-
|
|
67
65
|
return false;
|
|
68
|
-
};
|
|
69
|
-
// Accesing metadata in the audio contol, or paring the audio file
|
|
70
|
-
|
|
66
|
+
};
|
|
71
67
|
|
|
68
|
+
// Alternative methods could include:
|
|
69
|
+
// Accesing metadata in the audio contol, or paring the audio file
|
|
72
70
|
var guessNames = function guessNames(x) {
|
|
73
71
|
var a = x.uri.split('/').slice(-3); // Hope artist, album, track
|
|
74
|
-
|
|
75
72
|
var decode = function decode(str) {
|
|
76
73
|
try {
|
|
77
74
|
return decodeURIComponent(str);
|
|
@@ -79,41 +76,34 @@ module.exports = {
|
|
|
79
76
|
return str;
|
|
80
77
|
}
|
|
81
78
|
};
|
|
82
|
-
|
|
83
79
|
artistRow.textContent = decode(a[0]);
|
|
84
80
|
albumRow.textContent = decode(a[1]);
|
|
85
81
|
trackRow.textContent = decode(removeExtension(a[2]));
|
|
86
82
|
};
|
|
87
|
-
|
|
88
83
|
var moveOn = function moveOn(current, level) {
|
|
89
84
|
return new Promise(function (resolve) {
|
|
90
85
|
level = level || 0;
|
|
91
|
-
if (!options.chain) return resolve(null);
|
|
92
|
-
|
|
86
|
+
if (!options.chain) return resolve(null);
|
|
87
|
+
// Ideally navigate graph else cheat with URI munging:
|
|
93
88
|
var folder = kb.any(undefined, ns.ldp('contains'), current) || current.dir();
|
|
94
89
|
if (!folder) return resolve(null);
|
|
95
90
|
kb.fetcher.load(folder).then(function (_xhr) {
|
|
96
91
|
var contents = kb.each(folder, ns.ldp('contains')); // @@ load if not loaded
|
|
97
92
|
// if (contents.length < 2) return resolve(null) NO might move on from 1-track album
|
|
98
|
-
|
|
99
93
|
var j;
|
|
100
94
|
contents.sort(); // sort by URI which hopefully will get tracks in order
|
|
101
|
-
|
|
102
95
|
for (var i = 0; i < contents.length; i++) {
|
|
103
96
|
if (current.uri === contents[i].uri) {
|
|
104
97
|
j = (i + 1) % contents.length;
|
|
105
|
-
|
|
106
98
|
if (j === 0) {
|
|
107
99
|
if (!options.chainAlbums) {
|
|
108
100
|
if (options.loop) {
|
|
109
101
|
return resolve(contents[j]);
|
|
110
102
|
}
|
|
111
|
-
|
|
112
103
|
return resolve(null); // No more music needed
|
|
113
104
|
} else {
|
|
114
105
|
// chain albums
|
|
115
106
|
if (level === 1 || !options.chainAlbums) return resolve(null); // limit of navigating treee
|
|
116
|
-
|
|
117
107
|
moveOn(folder, level + 1).then(function (folder2) {
|
|
118
108
|
if (folder2) {
|
|
119
109
|
kb.fetcher.load(folder2).then(function (_xhr) {
|
|
@@ -131,7 +121,6 @@ module.exports = {
|
|
|
131
121
|
}
|
|
132
122
|
}
|
|
133
123
|
} // for
|
|
134
|
-
|
|
135
124
|
});
|
|
136
125
|
});
|
|
137
126
|
};
|
|
@@ -139,7 +128,6 @@ module.exports = {
|
|
|
139
128
|
var endedListener = function endedListener(event) {
|
|
140
129
|
var current = kb.sym(event.target.getAttribute('src'));
|
|
141
130
|
if (!options.chain) return;
|
|
142
|
-
|
|
143
131
|
var tryNext = function tryNext(cur) {
|
|
144
132
|
var current = cur;
|
|
145
133
|
moveOn(current).then(function (next) {
|
|
@@ -147,12 +135,10 @@ module.exports = {
|
|
|
147
135
|
console.log('No successor to ' + current);
|
|
148
136
|
return;
|
|
149
137
|
}
|
|
150
|
-
|
|
151
138
|
if (!looksRedundant(next)) {
|
|
152
139
|
console.log('Moving on to ' + next);
|
|
153
140
|
guessNames(next);
|
|
154
141
|
controlRow.appendChild(audioControl(next, true)); // Force autoplay
|
|
155
|
-
|
|
156
142
|
controlRow.removeChild(event.target);
|
|
157
143
|
} else {
|
|
158
144
|
console.log('Ignoring redundant ' + next);
|
|
@@ -160,15 +146,12 @@ module.exports = {
|
|
|
160
146
|
}
|
|
161
147
|
});
|
|
162
148
|
};
|
|
163
|
-
|
|
164
149
|
tryNext(current);
|
|
165
150
|
};
|
|
166
|
-
|
|
167
151
|
var audioControl = function audioControl(song, autoplay) {
|
|
168
152
|
var audio = dom.createElement('audio');
|
|
169
153
|
audio.setAttribute('controls', 'yes');
|
|
170
154
|
audio.setAttribute('src', song.uri);
|
|
171
|
-
|
|
172
155
|
if (autoplay) {
|
|
173
156
|
audio.setAttribute('autoplay', 'autoplay'); // Make this a personal preference
|
|
174
157
|
}
|
|
@@ -176,7 +159,6 @@ module.exports = {
|
|
|
176
159
|
audio.addEventListener('ended', endedListener, false);
|
|
177
160
|
return audio;
|
|
178
161
|
};
|
|
179
|
-
|
|
180
162
|
var div = dom.createElement('div');
|
|
181
163
|
var table = div.appendChild(dom.createElement('table'));
|
|
182
164
|
var labelStyle = 'padding: 0.3em; color:white; background-color: black;';
|
|
@@ -189,7 +171,6 @@ module.exports = {
|
|
|
189
171
|
var controlRow = table.appendChild(dom.createElement('tr'));
|
|
190
172
|
guessNames(subject);
|
|
191
173
|
controlRow.appendChild(audioControl(subject, options.autoplay));
|
|
192
|
-
|
|
193
174
|
if (!kb.holds(undefined, ns.ldp('contains'), subject) && subject.dir()) {
|
|
194
175
|
kb.fetcher.load(subject.dir()); // Prefetch enclosing @@ or playlist
|
|
195
176
|
}
|
|
@@ -197,4 +178,5 @@ module.exports = {
|
|
|
197
178
|
return div;
|
|
198
179
|
}
|
|
199
180
|
}; // ends
|
|
181
|
+
exports["default"] = _default;
|
|
200
182
|
//# sourceMappingURL=audioPane.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audioPane.js","names":["UI","require","$rdf","ns","module","exports","icon","icons","iconBase","name","label","subject","context","kb","session","store","typeURIs","findTypeURIs","prefix","Util","mediaTypeClass","uri","split","t","startsWith","render","dom","options","autoplay","chain","chainAlbums","loop","removeExtension","str","dot","lastIndexOf","slash","slice","looksRedundant","x","folder","any","undefined","ldp","contents","each","length","thisName","k","otherName","endsWith","guessNames","a","decode","decodeURIComponent","e","artistRow","textContent","albumRow","trackRow","moveOn","current","level","Promise","resolve","dir","fetcher","load","then","_xhr","j","sort","i","folder2","console","log","endedListener","event","sym","target","getAttribute","tryNext","cur","next","controlRow","appendChild","audioControl","removeChild","song","audio","createElement","setAttribute","addEventListener","div","table","labelStyle","style","cssText","holds"],"sources":["../../src/audio/audioPane.js"],"sourcesContent":["/* Single audio play Pane\n **\n */\nconst UI = require('solid-ui')\nconst $rdf = require('rdflib')\nconst ns = UI.ns\n\nmodule.exports = {\n icon: UI.icons.iconBase + 'noun_534313.svg',\n\n name: 'audio',\n\n // Does the subject deserve an audio play pane?\n label: function (subject, context) {\n const kb = context.session.store\n const typeURIs = kb.findTypeURIs(subject)\n\n const prefix = $rdf.Util.mediaTypeClass('audio/*').uri.split('*')[0]\n for (const t in typeURIs) {\n if (t.startsWith(prefix)) return 'Play audio'\n }\n return null\n },\n\n render: function (subject, context) {\n const kb = context.session.store\n const dom = context.dom\n const options = {\n autoplay: false,\n chain: true,\n chainAlbums: true,\n loop: false\n }\n\n const removeExtension = function (str) {\n const dot = str.lastIndexOf('.')\n if (dot < 0) return str // if any\n const slash = str.lastIndexOf('/')\n if (dot < slash) return str\n return str.slice(0, dot)\n }\n\n // True if there is another file like song.mp3 when this is \"song 1.mp3\"\n // or this is song.m4a\n //\n const looksRedundant = function (x) {\n const folder = kb.any(undefined, ns.ldp('contains'), x)\n if (!folder) return false\n const contents = kb.each(folder, ns.ldp('contains'))\n if (contents.length < 2) return false\n const thisName = x.uri\n for (let k = 0; k < contents.length; k++) {\n const otherName = contents[k].uri\n if (\n thisName.length > otherName.length &&\n thisName.startsWith(removeExtension(otherName))\n ) {\n return true\n }\n if (\n thisName.endsWith('.m4a') &&\n otherName.endsWith('.mp3') &&\n removeExtension(thisName) === removeExtension(otherName)\n ) {\n return true\n }\n }\n return false\n }\n\n // Alternative methods could include:\n // Accesing metadata in the audio contol, or paring the audio file\n const guessNames = function (x) {\n const a = x.uri.split('/').slice(-3) // Hope artist, album, track\n const decode = function (str) {\n try {\n return decodeURIComponent(str)\n } catch (e) {\n return str\n }\n }\n artistRow.textContent = decode(a[0])\n albumRow.textContent = decode(a[1])\n trackRow.textContent = decode(removeExtension(a[2]))\n }\n\n const moveOn = function (current, level) {\n return new Promise(function (resolve) {\n level = level || 0\n if (!options.chain) return resolve(null)\n // Ideally navigate graph else cheat with URI munging:\n const folder =\n kb.any(undefined, ns.ldp('contains'), current) || current.dir()\n if (!folder) return resolve(null)\n kb.fetcher.load(folder).then(function (_xhr) {\n const contents = kb.each(folder, ns.ldp('contains')) // @@ load if not loaded\n // if (contents.length < 2) return resolve(null) NO might move on from 1-track album\n let j\n contents.sort() // sort by URI which hopefully will get tracks in order\n for (let i = 0; i < contents.length; i++) {\n if (current.uri === contents[i].uri) {\n j = (i + 1) % contents.length\n if (j === 0) {\n if (!options.chainAlbums) {\n if (options.loop) {\n return resolve(contents[j])\n }\n return resolve(null) // No more music needed\n } else {\n // chain albums\n if (level === 1 || !options.chainAlbums) return resolve(null) // limit of navigating treee\n moveOn(folder, level + 1).then(function (folder2) {\n if (folder2) {\n kb.fetcher.load(folder2).then(function (_xhr) {\n const contents = kb.each(folder2, ns.ldp('contains'))\n if (contents.length === 0) return resolve(null)\n contents.sort()\n console.log('New Album: ' + folder2)\n return resolve(contents[0]) // Start off new album\n })\n }\n })\n }\n } else {\n return resolve(contents[j])\n }\n }\n } // for\n })\n })\n }\n const endedListener = function (event) {\n const current = kb.sym(event.target.getAttribute('src'))\n if (!options.chain) return\n const tryNext = function (cur) {\n const current = cur\n moveOn(current).then(function (next) {\n if (!next) {\n console.log('No successor to ' + current)\n return\n }\n if (!looksRedundant(next)) {\n console.log('Moving on to ' + next)\n guessNames(next)\n controlRow.appendChild(audioControl(next, true)) // Force autoplay\n controlRow.removeChild(event.target)\n } else {\n console.log('Ignoring redundant ' + next)\n tryNext(next)\n }\n })\n }\n tryNext(current)\n }\n\n const audioControl = function (song, autoplay) {\n const audio = dom.createElement('audio')\n audio.setAttribute('controls', 'yes')\n audio.setAttribute('src', song.uri)\n if (autoplay) {\n audio.setAttribute('autoplay', 'autoplay') // Make this a personal preference\n }\n audio.addEventListener('ended', endedListener, false)\n return audio\n }\n\n const div = dom.createElement('div')\n const table = div.appendChild(dom.createElement('table'))\n const labelStyle = 'padding: 0.3em; color:white; background-color: black;'\n const artistRow = table.appendChild(dom.createElement('tr'))\n artistRow.style.cssText = labelStyle\n const albumRow = table.appendChild(dom.createElement('tr'))\n albumRow.style.cssText = labelStyle\n const trackRow = table.appendChild(dom.createElement('tr'))\n trackRow.style.cssText = labelStyle\n const controlRow = table.appendChild(dom.createElement('tr'))\n guessNames(subject)\n controlRow.appendChild(audioControl(subject, options.autoplay))\n\n if (!kb.holds(undefined, ns.ldp('contains'), subject) && subject.dir()) {\n kb.fetcher.load(subject.dir()) // Prefetch enclosing @@ or playlist\n }\n\n return div\n }\n}\n\n// ends\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"audioPane.js","names":["ns","UI","icon","icons","iconBase","name","label","subject","context","kb","session","store","typeURIs","findTypeURIs","prefix","$rdf","Util","mediaTypeClass","uri","split","t","startsWith","render","dom","options","autoplay","chain","chainAlbums","loop","removeExtension","str","dot","lastIndexOf","slash","slice","looksRedundant","x","folder","any","undefined","ldp","contents","each","length","thisName","k","otherName","endsWith","guessNames","a","decode","decodeURIComponent","e","artistRow","textContent","albumRow","trackRow","moveOn","current","level","Promise","resolve","dir","fetcher","load","then","_xhr","j","sort","i","folder2","console","log","endedListener","event","sym","target","getAttribute","tryNext","cur","next","controlRow","appendChild","audioControl","removeChild","song","audio","createElement","setAttribute","addEventListener","div","table","labelStyle","style","cssText","holds"],"sources":["../../src/audio/audioPane.js"],"sourcesContent":["/* Single audio play Pane\n **\n */\n import * as UI from 'solid-ui'\n import * as $rdf from 'rdflib'\nconst ns = UI.ns\n\nexport default {\n icon: UI.icons.iconBase + 'noun_534313.svg',\n\n name: 'audio',\n\n // Does the subject deserve an audio play pane?\n label: function (subject, context) {\n const kb = context.session.store\n const typeURIs = kb.findTypeURIs(subject)\n\n const prefix = $rdf.Util.mediaTypeClass('audio/*').uri.split('*')[0]\n for (const t in typeURIs) {\n if (t.startsWith(prefix)) return 'Play audio'\n }\n return null\n },\n\n render: function (subject, context) {\n const kb = context.session.store\n const dom = context.dom\n const options = {\n autoplay: false,\n chain: true,\n chainAlbums: true,\n loop: false\n }\n\n const removeExtension = function (str) {\n const dot = str.lastIndexOf('.')\n if (dot < 0) return str // if any\n const slash = str.lastIndexOf('/')\n if (dot < slash) return str\n return str.slice(0, dot)\n }\n\n // True if there is another file like song.mp3 when this is \"song 1.mp3\"\n // or this is song.m4a\n //\n const looksRedundant = function (x) {\n const folder = kb.any(undefined, ns.ldp('contains'), x)\n if (!folder) return false\n const contents = kb.each(folder, ns.ldp('contains'))\n if (contents.length < 2) return false\n const thisName = x.uri\n for (let k = 0; k < contents.length; k++) {\n const otherName = contents[k].uri\n if (\n thisName.length > otherName.length &&\n thisName.startsWith(removeExtension(otherName))\n ) {\n return true\n }\n if (\n thisName.endsWith('.m4a') &&\n otherName.endsWith('.mp3') &&\n removeExtension(thisName) === removeExtension(otherName)\n ) {\n return true\n }\n }\n return false\n }\n\n // Alternative methods could include:\n // Accesing metadata in the audio contol, or paring the audio file\n const guessNames = function (x) {\n const a = x.uri.split('/').slice(-3) // Hope artist, album, track\n const decode = function (str) {\n try {\n return decodeURIComponent(str)\n } catch (e) {\n return str\n }\n }\n artistRow.textContent = decode(a[0])\n albumRow.textContent = decode(a[1])\n trackRow.textContent = decode(removeExtension(a[2]))\n }\n\n const moveOn = function (current, level) {\n return new Promise(function (resolve) {\n level = level || 0\n if (!options.chain) return resolve(null)\n // Ideally navigate graph else cheat with URI munging:\n const folder =\n kb.any(undefined, ns.ldp('contains'), current) || current.dir()\n if (!folder) return resolve(null)\n kb.fetcher.load(folder).then(function (_xhr) {\n const contents = kb.each(folder, ns.ldp('contains')) // @@ load if not loaded\n // if (contents.length < 2) return resolve(null) NO might move on from 1-track album\n let j\n contents.sort() // sort by URI which hopefully will get tracks in order\n for (let i = 0; i < contents.length; i++) {\n if (current.uri === contents[i].uri) {\n j = (i + 1) % contents.length\n if (j === 0) {\n if (!options.chainAlbums) {\n if (options.loop) {\n return resolve(contents[j])\n }\n return resolve(null) // No more music needed\n } else {\n // chain albums\n if (level === 1 || !options.chainAlbums) return resolve(null) // limit of navigating treee\n moveOn(folder, level + 1).then(function (folder2) {\n if (folder2) {\n kb.fetcher.load(folder2).then(function (_xhr) {\n const contents = kb.each(folder2, ns.ldp('contains'))\n if (contents.length === 0) return resolve(null)\n contents.sort()\n console.log('New Album: ' + folder2)\n return resolve(contents[0]) // Start off new album\n })\n }\n })\n }\n } else {\n return resolve(contents[j])\n }\n }\n } // for\n })\n })\n }\n const endedListener = function (event) {\n const current = kb.sym(event.target.getAttribute('src'))\n if (!options.chain) return\n const tryNext = function (cur) {\n const current = cur\n moveOn(current).then(function (next) {\n if (!next) {\n console.log('No successor to ' + current)\n return\n }\n if (!looksRedundant(next)) {\n console.log('Moving on to ' + next)\n guessNames(next)\n controlRow.appendChild(audioControl(next, true)) // Force autoplay\n controlRow.removeChild(event.target)\n } else {\n console.log('Ignoring redundant ' + next)\n tryNext(next)\n }\n })\n }\n tryNext(current)\n }\n\n const audioControl = function (song, autoplay) {\n const audio = dom.createElement('audio')\n audio.setAttribute('controls', 'yes')\n audio.setAttribute('src', song.uri)\n if (autoplay) {\n audio.setAttribute('autoplay', 'autoplay') // Make this a personal preference\n }\n audio.addEventListener('ended', endedListener, false)\n return audio\n }\n\n const div = dom.createElement('div')\n const table = div.appendChild(dom.createElement('table'))\n const labelStyle = 'padding: 0.3em; color:white; background-color: black;'\n const artistRow = table.appendChild(dom.createElement('tr'))\n artistRow.style.cssText = labelStyle\n const albumRow = table.appendChild(dom.createElement('tr'))\n albumRow.style.cssText = labelStyle\n const trackRow = table.appendChild(dom.createElement('tr'))\n trackRow.style.cssText = labelStyle\n const controlRow = table.appendChild(dom.createElement('tr'))\n guessNames(subject)\n controlRow.appendChild(audioControl(subject, options.autoplay))\n\n if (!kb.holds(undefined, ns.ldp('contains'), subject) && subject.dir()) {\n kb.fetcher.load(subject.dir()) // Prefetch enclosing @@ or playlist\n }\n\n return div\n }\n}\n\n// ends\n"],"mappings":"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"}
|
package/lib/classInstancePane.js
CHANGED
|
@@ -1,51 +1,55 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.classInstancePane = void 0;
|
|
8
|
+
var UI = _interopRequireWildcard(require("solid-ui"));
|
|
9
|
+
var $rdf = _interopRequireWildcard(require("rdflib"));
|
|
10
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
11
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
3
12
|
/* Class member Pane
|
|
4
13
|
**
|
|
5
14
|
** This outline pane lists the members of a class
|
|
6
15
|
*/
|
|
7
|
-
var UI = require('solid-ui');
|
|
8
|
-
|
|
9
|
-
var $rdf = require('rdflib');
|
|
10
16
|
|
|
11
17
|
var ns = UI.ns;
|
|
12
|
-
|
|
18
|
+
var classInstancePane = {
|
|
13
19
|
icon: UI.icons.originalIconBase + 'tango/22-folder-open.png',
|
|
14
20
|
name: 'classInstance',
|
|
15
21
|
// Create a new folder in a Solid system,
|
|
22
|
+
|
|
16
23
|
audience: [ns.solid('PowerUser')],
|
|
17
24
|
label: function label(subject, context) {
|
|
18
25
|
var kb = context.session.store;
|
|
19
26
|
var n = kb.each(undefined, ns.rdf('type'), subject).length;
|
|
20
27
|
if (n > 0) return 'List (' + n + ')'; // Show how many in hover text
|
|
21
|
-
|
|
22
28
|
return null; // Suppress pane otherwise
|
|
23
29
|
},
|
|
30
|
+
|
|
24
31
|
render: function render(subject, context) {
|
|
25
32
|
var dom = context.dom;
|
|
26
33
|
var outliner = context.getOutliner(dom);
|
|
27
34
|
var kb = context.session.store;
|
|
28
|
-
|
|
29
35
|
var complain = function complain(message, color) {
|
|
30
36
|
var pre = dom.createElement('pre');
|
|
31
37
|
pre.setAttribute('style', 'background-color: ' + color || '#eed' + ';');
|
|
32
38
|
div.appendChild(pre);
|
|
33
39
|
pre.appendChild(dom.createTextNode(message));
|
|
34
40
|
};
|
|
35
|
-
|
|
36
41
|
var div = dom.createElement('div');
|
|
37
42
|
div.setAttribute('class', 'instancePane');
|
|
38
|
-
div.setAttribute('style', ' border-top: solid 1px #777; border-bottom: solid 1px #777; margin-top: 0.5em; margin-bottom: 0.5em ');
|
|
43
|
+
div.setAttribute('style', ' border-top: solid 1px #777; border-bottom: solid 1px #777; margin-top: 0.5em; margin-bottom: 0.5em ');
|
|
39
44
|
|
|
45
|
+
// If this is a class, look for all both explicit and implicit
|
|
40
46
|
var sts = kb.statementsMatching(undefined, ns.rdf('type'), subject);
|
|
41
|
-
|
|
42
47
|
if (sts.length > 0) {
|
|
43
48
|
var already = {};
|
|
44
49
|
var more = [];
|
|
45
50
|
sts.forEach(function (st) {
|
|
46
51
|
already[st.subject.toNT()] = st;
|
|
47
52
|
});
|
|
48
|
-
|
|
49
53
|
for (var nt in kb.findMembersNT(subject)) {
|
|
50
54
|
if (!already[nt]) {
|
|
51
55
|
more.push($rdf.st(kb.fromNT(nt), ns.rdf('type'), subject)); // @@ no provenance
|
|
@@ -55,35 +59,29 @@ module.exports = {
|
|
|
55
59
|
if (more.length) {
|
|
56
60
|
complain('There are ' + sts.length + ' explicit and ' + more.length + ' implicit members of ' + UI.utils.label(subject));
|
|
57
61
|
}
|
|
58
|
-
|
|
59
|
-
|
|
62
|
+
if (subject.sameTerm(ns.rdf('Property'))) {
|
|
63
|
+
// / Do not find all properties used as properties .. unless look at kb index
|
|
60
64
|
} else if (subject.sameTerm(ns.rdfs('Class'))) {
|
|
61
65
|
var uses = kb.statementsMatching(undefined, ns.rdf('type'), undefined);
|
|
62
66
|
var usedTypes = {};
|
|
63
67
|
uses.forEach(function (st) {
|
|
64
68
|
usedTypes[st.object] = st;
|
|
65
69
|
}); // Get unique
|
|
66
|
-
|
|
67
70
|
var used = [];
|
|
68
|
-
|
|
69
71
|
for (var i in usedTypes) {
|
|
70
72
|
used.push($rdf.st($rdf.sym(i), ns.rdf('type'), ns.rdfs('Class')));
|
|
71
73
|
}
|
|
72
|
-
|
|
73
74
|
complain('Total of ' + uses.length + ' type statements and ' + used.length + ' unique types.');
|
|
74
75
|
}
|
|
75
|
-
|
|
76
76
|
if (sts.length > 10) {
|
|
77
77
|
var tr = dom.createElement('TR');
|
|
78
|
-
tr.appendChild(dom.createTextNode('' + sts.length));
|
|
79
|
-
|
|
78
|
+
tr.appendChild(dom.createTextNode('' + sts.length));
|
|
79
|
+
// tr.AJAR_statement=sts[i]
|
|
80
80
|
div.appendChild(tr);
|
|
81
81
|
}
|
|
82
|
-
|
|
83
82
|
outliner.appendPropertyTRs(div, sts, true, function (_pred) {
|
|
84
83
|
return true;
|
|
85
84
|
});
|
|
86
|
-
|
|
87
85
|
if (more.length) {
|
|
88
86
|
complain('Implicit:');
|
|
89
87
|
outliner.appendPropertyTRs(div, more, true, function (_pred) {
|
|
@@ -91,8 +89,9 @@ module.exports = {
|
|
|
91
89
|
});
|
|
92
90
|
}
|
|
93
91
|
}
|
|
94
|
-
|
|
95
92
|
return div;
|
|
96
93
|
}
|
|
97
|
-
};
|
|
94
|
+
};
|
|
95
|
+
// ends
|
|
96
|
+
exports.classInstancePane = classInstancePane;
|
|
98
97
|
//# sourceMappingURL=classInstancePane.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"classInstancePane.js","names":["
|
|
1
|
+
{"version":3,"file":"classInstancePane.js","names":["ns","UI","classInstancePane","icon","icons","originalIconBase","name","audience","solid","label","subject","context","kb","session","store","n","each","undefined","rdf","length","render","dom","outliner","getOutliner","complain","message","color","pre","createElement","setAttribute","div","appendChild","createTextNode","sts","statementsMatching","already","more","forEach","st","toNT","nt","findMembersNT","push","$rdf","fromNT","utils","sameTerm","rdfs","uses","usedTypes","object","used","i","sym","tr","appendPropertyTRs","_pred"],"sources":["../src/classInstancePane.js"],"sourcesContent":["/* Class member Pane\n **\n ** This outline pane lists the members of a class\n */\n\nimport * as UI from 'solid-ui'\nimport * as $rdf from 'rdflib'\n\nconst ns = UI.ns\n\nexport const classInstancePane = {\n icon: UI.icons.originalIconBase + 'tango/22-folder-open.png',\n\n name: 'classInstance',\n\n // Create a new folder in a Solid system,\n\n audience: [ns.solid('PowerUser')],\n\n label: function (subject, context) {\n const kb = context.session.store\n const n = kb.each(undefined, ns.rdf('type'), subject).length\n if (n > 0) return 'List (' + n + ')' // Show how many in hover text\n return null // Suppress pane otherwise\n },\n\n render: function (subject, context) {\n const dom = context.dom\n const outliner = context.getOutliner(dom)\n const kb = context.session.store\n const complain = function complain (message, color) {\n const pre = dom.createElement('pre')\n pre.setAttribute('style', 'background-color: ' + color || '#eed' + ';')\n div.appendChild(pre)\n pre.appendChild(dom.createTextNode(message))\n }\n const div = dom.createElement('div')\n div.setAttribute('class', 'instancePane')\n div.setAttribute(\n 'style',\n ' border-top: solid 1px #777; border-bottom: solid 1px #777; margin-top: 0.5em; margin-bottom: 0.5em '\n )\n\n // If this is a class, look for all both explicit and implicit\n const sts = kb.statementsMatching(undefined, ns.rdf('type'), subject)\n if (sts.length > 0) {\n const already = {}\n const more = []\n sts.forEach(st => {\n already[st.subject.toNT()] = st\n })\n for (const nt in kb.findMembersNT(subject)) {\n if (!already[nt]) {\n more.push($rdf.st(kb.fromNT(nt), ns.rdf('type'), subject)) // @@ no provenance\n }\n }\n if (more.length) {\n complain(\n 'There are ' +\n sts.length +\n ' explicit and ' +\n more.length +\n ' implicit members of ' +\n UI.utils.label(subject)\n )\n }\n if (subject.sameTerm(ns.rdf('Property'))) {\n // / Do not find all properties used as properties .. unless look at kb index\n } else if (subject.sameTerm(ns.rdfs('Class'))) {\n const uses = kb.statementsMatching(undefined, ns.rdf('type'), undefined)\n const usedTypes = {}\n uses.forEach(function (st) {\n usedTypes[st.object] = st\n }) // Get unique\n const used = []\n for (const i in usedTypes) {\n used.push($rdf.st($rdf.sym(i), ns.rdf('type'), ns.rdfs('Class')))\n }\n complain(\n 'Total of ' +\n uses.length +\n ' type statements and ' +\n used.length +\n ' unique types.'\n )\n }\n\n if (sts.length > 10) {\n const tr = dom.createElement('TR')\n tr.appendChild(dom.createTextNode('' + sts.length))\n // tr.AJAR_statement=sts[i]\n div.appendChild(tr)\n }\n\n outliner.appendPropertyTRs(div, sts, true, function (_pred) {\n return true\n })\n\n if (more.length) {\n complain('Implicit:')\n outliner.appendPropertyTRs(div, more, true, function (_pred) {\n return true\n })\n }\n }\n\n return div\n }\n}\n// ends\n"],"mappings":"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"}
|
|
File without changes
|
|
File without changes
|