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