solid-ui 2.6.1 → 3.0.0-3b4b518
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 +236 -30
- 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 +30 -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/forms.js
DELETED
|
@@ -1,2045 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
5
|
-
Object.defineProperty(exports, "__esModule", {
|
|
6
|
-
value: true
|
|
7
|
-
});
|
|
8
|
-
exports.appendForm = appendForm;
|
|
9
|
-
Object.defineProperty(exports, "basicField", {
|
|
10
|
-
enumerable: true,
|
|
11
|
-
get: function get() {
|
|
12
|
-
return _basic.basicField;
|
|
13
|
-
}
|
|
14
|
-
});
|
|
15
|
-
exports.buildCheckboxForm = buildCheckboxForm;
|
|
16
|
-
exports.editFormButton = editFormButton;
|
|
17
|
-
Object.defineProperty(exports, "field", {
|
|
18
|
-
enumerable: true,
|
|
19
|
-
get: function get() {
|
|
20
|
-
return _fieldFunction.field;
|
|
21
|
-
}
|
|
22
|
-
});
|
|
23
|
-
Object.defineProperty(exports, "fieldFunction", {
|
|
24
|
-
enumerable: true,
|
|
25
|
-
get: function get() {
|
|
26
|
-
return _fieldFunction.fieldFunction;
|
|
27
|
-
}
|
|
28
|
-
});
|
|
29
|
-
Object.defineProperty(exports, "fieldLabel", {
|
|
30
|
-
enumerable: true,
|
|
31
|
-
get: function get() {
|
|
32
|
-
return _basic.fieldLabel;
|
|
33
|
-
}
|
|
34
|
-
});
|
|
35
|
-
Object.defineProperty(exports, "fieldParams", {
|
|
36
|
-
enumerable: true,
|
|
37
|
-
get: function get() {
|
|
38
|
-
return _fieldParams.fieldParams;
|
|
39
|
-
}
|
|
40
|
-
});
|
|
41
|
-
Object.defineProperty(exports, "fieldStore", {
|
|
42
|
-
enumerable: true,
|
|
43
|
-
get: function get() {
|
|
44
|
-
return _basic.fieldStore;
|
|
45
|
-
}
|
|
46
|
-
});
|
|
47
|
-
exports.findClosest = findClosest;
|
|
48
|
-
exports.formsFor = formsFor;
|
|
49
|
-
exports.makeDescription = makeDescription;
|
|
50
|
-
exports.makeSelectForCategory = makeSelectForCategory;
|
|
51
|
-
exports.makeSelectForChoice = makeSelectForChoice;
|
|
52
|
-
exports.makeSelectForClassifierOptions = makeSelectForClassifierOptions;
|
|
53
|
-
exports.makeSelectForNestedCategory = makeSelectForNestedCategory;
|
|
54
|
-
exports.makeSelectForOptions = makeSelectForOptions;
|
|
55
|
-
Object.defineProperty(exports, "mostSpecificClassURI", {
|
|
56
|
-
enumerable: true,
|
|
57
|
-
get: function get() {
|
|
58
|
-
return _fieldFunction.mostSpecificClassURI;
|
|
59
|
-
}
|
|
60
|
-
});
|
|
61
|
-
exports.newButton = newButton;
|
|
62
|
-
exports.newThing = newThing;
|
|
63
|
-
exports.promptForNew = promptForNew;
|
|
64
|
-
exports.propertiesForClass = propertiesForClass;
|
|
65
|
-
Object.defineProperty(exports, "renderNameValuePair", {
|
|
66
|
-
enumerable: true,
|
|
67
|
-
get: function get() {
|
|
68
|
-
return _basic.renderNameValuePair;
|
|
69
|
-
}
|
|
70
|
-
});
|
|
71
|
-
exports.sortByLabel = sortByLabel;
|
|
72
|
-
exports.sortBySequence = sortBySequence;
|
|
73
|
-
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
74
|
-
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
75
|
-
var buttons = _interopRequireWildcard(require("./buttons"));
|
|
76
|
-
var _fieldParams = require("./forms/fieldParams");
|
|
77
|
-
var _fieldFunction = require("./forms/fieldFunction");
|
|
78
|
-
var _formStyle = require("./forms/formStyle");
|
|
79
|
-
var debug = _interopRequireWildcard(require("../debug"));
|
|
80
|
-
var _error = require("./error");
|
|
81
|
-
var _basic = require("./forms/basic");
|
|
82
|
-
var _autocompleteField = require("./forms/autocomplete/autocompleteField");
|
|
83
|
-
var style = _interopRequireWildcard(require("../style"));
|
|
84
|
-
var _styleConstants = _interopRequireDefault(require("../styleConstants"));
|
|
85
|
-
var _iconBase = require("../iconBase");
|
|
86
|
-
var log = _interopRequireWildcard(require("../log"));
|
|
87
|
-
var ns = _interopRequireWildcard(require("../ns"));
|
|
88
|
-
var $rdf = _interopRequireWildcard(require("rdflib"));
|
|
89
|
-
var _solidLogic = require("solid-logic");
|
|
90
|
-
var utils = _interopRequireWildcard(require("../utils"));
|
|
91
|
-
var _multiSelect = require("./multiSelect");
|
|
92
|
-
var widgets = _interopRequireWildcard(require("../widgets"));
|
|
93
|
-
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 _t3 in e) "default" !== _t3 && {}.hasOwnProperty.call(e, _t3) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t3)) && (i.get || i.set) ? o(f, _t3, i) : f[_t3] = e[_t3]); return f; })(e, t); }
|
|
94
|
-
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
|
|
95
|
-
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
96
|
-
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } /* F O R M S
|
|
97
|
-
*
|
|
98
|
-
* A Vanilla Dom implementation of the form language
|
|
99
|
-
*/ /* global alert */ // Note default export
|
|
100
|
-
var checkMarkCharacter = "\u2713";
|
|
101
|
-
var cancelCharacter = "\u2715";
|
|
102
|
-
var dashCharacter = '-';
|
|
103
|
-
var kb = _solidLogic.store;
|
|
104
|
-
_fieldFunction.field[ns.ui('AutocompleteField').uri] = _autocompleteField.autocompleteField;
|
|
105
|
-
|
|
106
|
-
// ///////////////////////////////////////////////////////////////////////
|
|
107
|
-
|
|
108
|
-
/* Form Field implementations
|
|
109
|
-
**
|
|
110
|
-
*/
|
|
111
|
-
/** Group of different fields
|
|
112
|
-
**
|
|
113
|
-
** One type of form field is an ordered Group of other fields.
|
|
114
|
-
** A Form is actually just the same as a group.
|
|
115
|
-
**
|
|
116
|
-
** @param {Document} dom The HTML Document object aka Document Object Model
|
|
117
|
-
** @param {Element?} container If present, the created widget will be appended to this
|
|
118
|
-
** @param {Map} already A hash table of (form, subject) kept to prevent recursive forms looping
|
|
119
|
-
** @param {Node} subject The thing about which the form displays/edits data
|
|
120
|
-
** @param {Node} form The form or field to be rendered
|
|
121
|
-
** @param {Node} dataDoc The web document in which the data is
|
|
122
|
-
** @param {function(ok, errorMessage)} callbackFunction Called when data is changed?
|
|
123
|
-
**
|
|
124
|
-
** @returns {Element} The HTML widget created
|
|
125
|
-
*/
|
|
126
|
-
function refreshOpionsSubfieldinGroup(dom, already, subject, dataDoc, callbackFunction, groupDiv, subfields) {
|
|
127
|
-
var eles = groupDiv.children;
|
|
128
|
-
for (var j = 0; j < subfields.length; j++) {
|
|
129
|
-
// This is really messy.
|
|
130
|
-
var _field = subfields[j];
|
|
131
|
-
var t = (0, _fieldFunction.mostSpecificClassURI)(_field); // Field type
|
|
132
|
-
if (t === ns.ui('Options').uri) {
|
|
133
|
-
var optionsRender = (0, _fieldFunction.fieldFunction)(dom, _field);
|
|
134
|
-
var newOne = optionsRender(dom, null, already, subject, _field, dataDoc, callbackFunction);
|
|
135
|
-
debug.log('Refreshing Options field by replacing it.'); // better to support actual refresh
|
|
136
|
-
groupDiv.insertBefore(newOne, eles[j]);
|
|
137
|
-
groupDiv.removeChild(eles[j + 1]); // Remove the old one
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
_fieldFunction.field[ns.ui('Form').uri] = _fieldFunction.field[ns.ui('Group').uri] = function (dom, container, already, subject, form, dataDoc, callbackFunction) {
|
|
142
|
-
var box = dom.createElement('div');
|
|
143
|
-
var ui = ns.ui;
|
|
144
|
-
if (container) container.appendChild(box);
|
|
145
|
-
|
|
146
|
-
// Prevent loops
|
|
147
|
-
if (!form) return;
|
|
148
|
-
var key = subject.toNT() + '|' + form.toNT();
|
|
149
|
-
if (already[key]) {
|
|
150
|
-
// been there done that
|
|
151
|
-
box.appendChild(dom.createTextNode('Group: see above ' + key));
|
|
152
|
-
// TODO fix dependency cycle to solid-panes by calling outlineManager
|
|
153
|
-
// const plist = [$rdf.st(subject, ns.owl('sameAs'), subject)] // @@ need prev subject
|
|
154
|
-
// dom.outlineManager.appendPropertyTRs(box, plist)
|
|
155
|
-
// dom.appendChild(plist)
|
|
156
|
-
return box;
|
|
157
|
-
}
|
|
158
|
-
var already2 = {};
|
|
159
|
-
for (var x in already) already2[x] = 1;
|
|
160
|
-
already2[key] = 1;
|
|
161
|
-
var formDoc = form.doc ? form.doc() : null; // @@ if blank no way to know
|
|
162
|
-
var weight0 = kb.any(form, ui('weight'), null, formDoc); // Say 0-3
|
|
163
|
-
var weight = weight0 ? Number(weight0.value) : 1;
|
|
164
|
-
if (weight > 3 || weight < 0) return box.appendChild((0, _error.errorMessageBlock)(dom, "Form Group weight ".concat(weight, " should be 0-3")));
|
|
165
|
-
box.setAttribute('style', style.formGroupStyle[weight]); // Indent a group
|
|
166
|
-
box.style.display = 'flex';
|
|
167
|
-
box.style.flexDirection = 'column';
|
|
168
|
-
box["class"] = 'form-weight-' + weight;
|
|
169
|
-
var parts = kb.any(form, ui('parts'), null, formDoc);
|
|
170
|
-
var subfields;
|
|
171
|
-
if (parts) {
|
|
172
|
-
subfields = parts.elements;
|
|
173
|
-
} else {
|
|
174
|
-
parts = kb.each(form, ui('part'), null, formDoc); // Warning: unordered
|
|
175
|
-
subfields = sortBySequence(parts);
|
|
176
|
-
}
|
|
177
|
-
if (!parts) {
|
|
178
|
-
return box.appendChild((0, _error.errorMessageBlock)(dom, 'No parts to form! '));
|
|
179
|
-
}
|
|
180
|
-
for (var i = 0; i < subfields.length; i++) {
|
|
181
|
-
var _field2 = subfields[i];
|
|
182
|
-
var subFieldFunction = (0, _fieldFunction.fieldFunction)(dom, _field2); //
|
|
183
|
-
|
|
184
|
-
var itemChanged = function itemChanged(ok, body) {
|
|
185
|
-
if (ok && body && body.widget && body.widget === 'select') {
|
|
186
|
-
refreshOpionsSubfieldinGroup(dom, already, subject, dataDoc, callbackFunction, box, subfields);
|
|
187
|
-
}
|
|
188
|
-
callbackFunction(ok, {
|
|
189
|
-
widget: 'group',
|
|
190
|
-
change: body
|
|
191
|
-
});
|
|
192
|
-
};
|
|
193
|
-
box.appendChild(subFieldFunction(dom, null, already2, subject, _field2, dataDoc, itemChanged));
|
|
194
|
-
}
|
|
195
|
-
return box;
|
|
196
|
-
};
|
|
197
|
-
|
|
198
|
-
/** Options field: Select one or more cases
|
|
199
|
-
**
|
|
200
|
-
** @param {Document} dom The HTML Document object aka Document Object Model
|
|
201
|
-
** @param {Element?} container If present, the created widget will be appended to this
|
|
202
|
-
** @param {Map} already A hash table of (form, subject) kept to prevent recursive forms looping
|
|
203
|
-
** @param {Node} subject The thing about which the form displays/edits data
|
|
204
|
-
** @param {Node} form The form or field to be rendered
|
|
205
|
-
** @param {Node} dataDoc The web document in which the data is
|
|
206
|
-
** @param {function(ok, errorMessage)} callbackFunction Called when data is changed?
|
|
207
|
-
**
|
|
208
|
-
** @returns {Element} The HTML widget created
|
|
209
|
-
*/
|
|
210
|
-
|
|
211
|
-
_fieldFunction.field[ns.ui('Options').uri] = function (dom, container, already, subject, form, dataDoc, callbackFunction) {
|
|
212
|
-
var kb = _solidLogic.store;
|
|
213
|
-
var box = dom.createElement('div');
|
|
214
|
-
var formDoc = form.doc ? form.doc() : null; // @@ if blank no way to know
|
|
215
|
-
|
|
216
|
-
var ui = ns.ui;
|
|
217
|
-
if (container) container.appendChild(box);
|
|
218
|
-
var dependingOn = kb.any(form, ui('dependingOn'));
|
|
219
|
-
if (!dependingOn) {
|
|
220
|
-
dependingOn = ns.rdf('type');
|
|
221
|
-
} // @@ default to type (do we want defaults?)
|
|
222
|
-
var cases = kb.each(form, ui('case'), null, formDoc);
|
|
223
|
-
if (!cases) {
|
|
224
|
-
box.appendChild((0, _error.errorMessageBlock)(dom, 'No cases to Options form. '));
|
|
225
|
-
}
|
|
226
|
-
var values;
|
|
227
|
-
if (dependingOn.sameTerm(ns.rdf('type'))) {
|
|
228
|
-
values = Object.keys(kb.findTypeURIs(subject)).map(function (uri) {
|
|
229
|
-
return $rdf.sym(uri);
|
|
230
|
-
}); // Use RDF-S inference
|
|
231
|
-
} else {
|
|
232
|
-
values = kb.each(subject, dependingOn);
|
|
233
|
-
}
|
|
234
|
-
for (var i = 0; i < cases.length; i++) {
|
|
235
|
-
var c = cases[i];
|
|
236
|
-
var tests = kb.each(c, ui('for'), null, formDoc); // There can be multiple 'for'
|
|
237
|
-
var match = false;
|
|
238
|
-
for (var j = 0; j < tests.length; j++) {
|
|
239
|
-
var _iterator = _createForOfIteratorHelper(values),
|
|
240
|
-
_step;
|
|
241
|
-
try {
|
|
242
|
-
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
243
|
-
var value = _step.value;
|
|
244
|
-
var test = tests[j];
|
|
245
|
-
if (value.sameTerm(tests) || value.termType === test.termType && value.value === test.value) {
|
|
246
|
-
match = true;
|
|
247
|
-
}
|
|
248
|
-
}
|
|
249
|
-
} catch (err) {
|
|
250
|
-
_iterator.e(err);
|
|
251
|
-
} finally {
|
|
252
|
-
_iterator.f();
|
|
253
|
-
}
|
|
254
|
-
}
|
|
255
|
-
if (match) {
|
|
256
|
-
var _field3 = kb.the(c, ui('use'));
|
|
257
|
-
if (!_field3) {
|
|
258
|
-
box.appendChild((0, _error.errorMessageBlock)(dom, 'No "use" part for case in form ' + form));
|
|
259
|
-
return box;
|
|
260
|
-
} else {
|
|
261
|
-
appendForm(dom, box, already, subject, _field3, dataDoc, callbackFunction);
|
|
262
|
-
}
|
|
263
|
-
break;
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
// @@ Add box.refresh() to sync fields with values
|
|
267
|
-
return box;
|
|
268
|
-
};
|
|
269
|
-
|
|
270
|
-
/** Multiple field: zero or more similar subFields
|
|
271
|
-
**
|
|
272
|
-
** @param {Document} dom The HTML Document object aka Document Object Model
|
|
273
|
-
** @param {Element?} container If present, the created widget will be appended to this
|
|
274
|
-
** @param {Map} already A hash table of (form, subject) kept to prevent recursive forms looping
|
|
275
|
-
** @param {Node} subject The thing about which the form displays/edits data
|
|
276
|
-
** @param {Node} form The form or field to be rendered
|
|
277
|
-
** @param {Node} dataDoc The web document in which the data is
|
|
278
|
-
** @param {function(ok, errorMessage)} callbackFunction Called when data is changed?
|
|
279
|
-
**
|
|
280
|
-
** @returns {Element} The HTML widget created
|
|
281
|
-
**
|
|
282
|
-
** Form properties:
|
|
283
|
-
** @param {Boolean} reverse Make e reverse arc in the data OPS not SPO
|
|
284
|
-
** @param {NamedNode} property The property to be written in the data
|
|
285
|
-
** @param {Boolean} ordered Is the list an ordered one where the user defined the order
|
|
286
|
-
*/
|
|
287
|
-
_fieldFunction.field[ns.ui('Multiple').uri] = function (dom, container, already, subject, form, dataDoc, callbackFunction) {
|
|
288
|
-
/** Diagnostic function
|
|
289
|
-
*/
|
|
290
|
-
function debugString(values) {
|
|
291
|
-
return values.map(function (x) {
|
|
292
|
-
return x.toString().slice(-7);
|
|
293
|
-
}).join(', ');
|
|
294
|
-
}
|
|
295
|
-
|
|
296
|
-
/** Add an item to the local quadstore not the UI or the web
|
|
297
|
-
*
|
|
298
|
-
* @param {Node} object The RDF object to be represented by this item.
|
|
299
|
-
*/
|
|
300
|
-
function addItem() {
|
|
301
|
-
return _addItem.apply(this, arguments);
|
|
302
|
-
}
|
|
303
|
-
/** Make a dom representation for an item
|
|
304
|
-
* @param {Event} anyEvent if used as an event handler
|
|
305
|
-
* @param {Node} object The RDF object to be represented by this item.
|
|
306
|
-
*/
|
|
307
|
-
function _addItem() {
|
|
308
|
-
_addItem = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee6() {
|
|
309
|
-
var object, toBeInserted, msg, _t;
|
|
310
|
-
return _regenerator["default"].wrap(function (_context6) {
|
|
311
|
-
while (1) switch (_context6.prev = _context6.next) {
|
|
312
|
-
case 0:
|
|
313
|
-
object = newThing(dataDoc); // by default just add new nodes
|
|
314
|
-
if (!ordered) {
|
|
315
|
-
_context6.next = 2;
|
|
316
|
-
break;
|
|
317
|
-
}
|
|
318
|
-
createListIfNecessary(); // Sets list and unsavedList
|
|
319
|
-
list.elements.push(object);
|
|
320
|
-
_context6.next = 1;
|
|
321
|
-
return saveListThenRefresh();
|
|
322
|
-
case 1:
|
|
323
|
-
_context6.next = 7;
|
|
324
|
-
break;
|
|
325
|
-
case 2:
|
|
326
|
-
toBeInserted = reverse ? [$rdf.st(object, property, subject, dataDoc)] : [$rdf.st(subject, property, object, dataDoc)];
|
|
327
|
-
_context6.prev = 3;
|
|
328
|
-
_context6.next = 4;
|
|
329
|
-
return kb.updater.update([], toBeInserted);
|
|
330
|
-
case 4:
|
|
331
|
-
_context6.next = 6;
|
|
332
|
-
break;
|
|
333
|
-
case 5:
|
|
334
|
-
_context6.prev = 5;
|
|
335
|
-
_t = _context6["catch"](3);
|
|
336
|
-
msg = 'Error adding to unordered multiple: ' + _t;
|
|
337
|
-
box.appendChild((0, _error.errorMessageBlock)(dom, msg));
|
|
338
|
-
debug.error(msg);
|
|
339
|
-
case 6:
|
|
340
|
-
refresh();
|
|
341
|
-
case 7:
|
|
342
|
-
case "end":
|
|
343
|
-
return _context6.stop();
|
|
344
|
-
}
|
|
345
|
-
}, _callee6, null, [[3, 5]]);
|
|
346
|
-
}));
|
|
347
|
-
return _addItem.apply(this, arguments);
|
|
348
|
-
}
|
|
349
|
-
function renderItem(object) {
|
|
350
|
-
function deleteThisItem() {
|
|
351
|
-
return _deleteThisItem.apply(this, arguments);
|
|
352
|
-
}
|
|
353
|
-
/** Move the object up or down in the ordered list
|
|
354
|
-
* @param {Event} anyEvent if used as an event handler
|
|
355
|
-
* @param {Boolean} upwards Move this up (true) or down (false).
|
|
356
|
-
*/
|
|
357
|
-
function _deleteThisItem() {
|
|
358
|
-
_deleteThisItem = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee3() {
|
|
359
|
-
var i, del;
|
|
360
|
-
return _regenerator["default"].wrap(function (_context3) {
|
|
361
|
-
while (1) switch (_context3.prev = _context3.next) {
|
|
362
|
-
case 0:
|
|
363
|
-
if (!ordered) {
|
|
364
|
-
_context3.next = 5;
|
|
365
|
-
break;
|
|
366
|
-
}
|
|
367
|
-
debug.log('pre delete: ' + debugString(list.elements));
|
|
368
|
-
i = 0;
|
|
369
|
-
case 1:
|
|
370
|
-
if (!(i < list.elements.length)) {
|
|
371
|
-
_context3.next = 4;
|
|
372
|
-
break;
|
|
373
|
-
}
|
|
374
|
-
if (!list.elements[i].sameTerm(object)) {
|
|
375
|
-
_context3.next = 3;
|
|
376
|
-
break;
|
|
377
|
-
}
|
|
378
|
-
list.elements.splice(i, 1);
|
|
379
|
-
_context3.next = 2;
|
|
380
|
-
return saveListThenRefresh();
|
|
381
|
-
case 2:
|
|
382
|
-
return _context3.abrupt("return");
|
|
383
|
-
case 3:
|
|
384
|
-
i++;
|
|
385
|
-
_context3.next = 1;
|
|
386
|
-
break;
|
|
387
|
-
case 4:
|
|
388
|
-
_context3.next = 6;
|
|
389
|
-
break;
|
|
390
|
-
case 5:
|
|
391
|
-
// unordered
|
|
392
|
-
if (kb.holds(subject, property, object, dataDoc)) {
|
|
393
|
-
del = [$rdf.st(subject, property, object, dataDoc)];
|
|
394
|
-
kb.updater.update(del, [], function (uri, ok, message) {
|
|
395
|
-
if (ok) {
|
|
396
|
-
body.removeChild(subField);
|
|
397
|
-
} else {
|
|
398
|
-
body.appendChild((0, _error.errorMessageBlock)(dom, 'Multiple: delete failed: ' + message));
|
|
399
|
-
}
|
|
400
|
-
});
|
|
401
|
-
}
|
|
402
|
-
case 6:
|
|
403
|
-
case "end":
|
|
404
|
-
return _context3.stop();
|
|
405
|
-
}
|
|
406
|
-
}, _callee3);
|
|
407
|
-
}));
|
|
408
|
-
return _deleteThisItem.apply(this, arguments);
|
|
409
|
-
}
|
|
410
|
-
function moveThisItem(_x, _x2) {
|
|
411
|
-
return _moveThisItem.apply(this, arguments);
|
|
412
|
-
}
|
|
413
|
-
/* A subField has been filled in
|
|
414
|
-
*
|
|
415
|
-
* One possibility is to not actually make the link to the thing until
|
|
416
|
-
* this callback happens to avoid widow links
|
|
417
|
-
*/
|
|
418
|
-
function _moveThisItem() {
|
|
419
|
-
_moveThisItem = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee4(event, upwards) {
|
|
420
|
-
var i;
|
|
421
|
-
return _regenerator["default"].wrap(function (_context4) {
|
|
422
|
-
while (1) switch (_context4.prev = _context4.next) {
|
|
423
|
-
case 0:
|
|
424
|
-
// @@ possibly, allow shift+click to do move to top or bottom?
|
|
425
|
-
debug.log('pre move: ' + debugString(list.elements));
|
|
426
|
-
i = 0;
|
|
427
|
-
case 1:
|
|
428
|
-
if (!(i < list.elements.length)) {
|
|
429
|
-
_context4.next = 3;
|
|
430
|
-
break;
|
|
431
|
-
}
|
|
432
|
-
if (!list.elements[i].sameTerm(object)) {
|
|
433
|
-
_context4.next = 2;
|
|
434
|
-
break;
|
|
435
|
-
}
|
|
436
|
-
return _context4.abrupt("continue", 3);
|
|
437
|
-
case 2:
|
|
438
|
-
i++;
|
|
439
|
-
_context4.next = 1;
|
|
440
|
-
break;
|
|
441
|
-
case 3:
|
|
442
|
-
if (i === list.elements.length) {
|
|
443
|
-
alert('list move: not found element for ' + object);
|
|
444
|
-
}
|
|
445
|
-
if (!upwards) {
|
|
446
|
-
_context4.next = 5;
|
|
447
|
-
break;
|
|
448
|
-
}
|
|
449
|
-
if (!(i === 0)) {
|
|
450
|
-
_context4.next = 4;
|
|
451
|
-
break;
|
|
452
|
-
}
|
|
453
|
-
alert('@@ boop - already at top -temp message'); // @@ make boop sound
|
|
454
|
-
return _context4.abrupt("return");
|
|
455
|
-
case 4:
|
|
456
|
-
list.elements.splice(i - 1, 2, list.elements[i], list.elements[i - 1]);
|
|
457
|
-
_context4.next = 7;
|
|
458
|
-
break;
|
|
459
|
-
case 5:
|
|
460
|
-
if (!(i === list.elements.length - 1)) {
|
|
461
|
-
_context4.next = 6;
|
|
462
|
-
break;
|
|
463
|
-
}
|
|
464
|
-
alert('@@ boop - already at bottom -temp message'); // @@ make boop sound
|
|
465
|
-
return _context4.abrupt("return");
|
|
466
|
-
case 6:
|
|
467
|
-
list.elements.splice(i, 2, list.elements[i + 1], list.elements[i]);
|
|
468
|
-
case 7:
|
|
469
|
-
_context4.next = 8;
|
|
470
|
-
return saveListThenRefresh();
|
|
471
|
-
case 8:
|
|
472
|
-
case "end":
|
|
473
|
-
return _context4.stop();
|
|
474
|
-
}
|
|
475
|
-
}, _callee4);
|
|
476
|
-
}));
|
|
477
|
-
return _moveThisItem.apply(this, arguments);
|
|
478
|
-
}
|
|
479
|
-
function itemDone(ok, message) {
|
|
480
|
-
debug.log("Item done callback for item ".concat(object.toString()));
|
|
481
|
-
if (!ok) {
|
|
482
|
-
// when does this happen? errors typically deal with upstream
|
|
483
|
-
debug.error(' Item done callback: Error: ' + message);
|
|
484
|
-
}
|
|
485
|
-
callbackFunction(ok, message);
|
|
486
|
-
}
|
|
487
|
-
log.debug('Multiple: render object: ' + object);
|
|
488
|
-
var fn = (0, _fieldFunction.fieldFunction)(dom, element);
|
|
489
|
-
var subField = fn(dom, null, already, object, element, dataDoc, itemDone); // subfields was: body. moving to not passing that
|
|
490
|
-
subField.subject = object; // Keep a back pointer between the DOM array and the RDF objects
|
|
491
|
-
|
|
492
|
-
// delete button and move buttons
|
|
493
|
-
if (kb.updater.editable(dataDoc.uri)) {
|
|
494
|
-
buttons.deleteButtonWithCheck(dom, subField, multipleUIlabel, deleteThisItem);
|
|
495
|
-
if (ordered) {
|
|
496
|
-
// Add controsl in a frame
|
|
497
|
-
var frame = dom.createElement('div');
|
|
498
|
-
frame.style.display = 'grid';
|
|
499
|
-
frame.style.gridTemplateColumns = 'auto 3em';
|
|
500
|
-
frame.style.gridTemplateRows = '50% 50%';
|
|
501
|
-
var moveUpButton = buttons.button(dom, _iconBase.icons.iconBase + 'noun_1369237.svg', 'Move Up', /*#__PURE__*/function () {
|
|
502
|
-
var _ref = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee(event) {
|
|
503
|
-
return _regenerator["default"].wrap(function (_context) {
|
|
504
|
-
while (1) switch (_context.prev = _context.next) {
|
|
505
|
-
case 0:
|
|
506
|
-
return _context.abrupt("return", moveThisItem(event, true));
|
|
507
|
-
case 1:
|
|
508
|
-
case "end":
|
|
509
|
-
return _context.stop();
|
|
510
|
-
}
|
|
511
|
-
}, _callee);
|
|
512
|
-
}));
|
|
513
|
-
return function (_x3) {
|
|
514
|
-
return _ref.apply(this, arguments);
|
|
515
|
-
};
|
|
516
|
-
}());
|
|
517
|
-
var moveDownButton = buttons.button(dom, _iconBase.icons.iconBase + 'noun_1369241.svg', 'Move Down', /*#__PURE__*/function () {
|
|
518
|
-
var _ref2 = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee2(event) {
|
|
519
|
-
return _regenerator["default"].wrap(function (_context2) {
|
|
520
|
-
while (1) switch (_context2.prev = _context2.next) {
|
|
521
|
-
case 0:
|
|
522
|
-
return _context2.abrupt("return", moveThisItem(event, false));
|
|
523
|
-
case 1:
|
|
524
|
-
case "end":
|
|
525
|
-
return _context2.stop();
|
|
526
|
-
}
|
|
527
|
-
}, _callee2);
|
|
528
|
-
}));
|
|
529
|
-
return function (_x4) {
|
|
530
|
-
return _ref2.apply(this, arguments);
|
|
531
|
-
};
|
|
532
|
-
}());
|
|
533
|
-
var _shim = dom.createElement('div');
|
|
534
|
-
_shim.appendChild(subField); // Subfield has its own layout
|
|
535
|
-
frame.appendChild(_shim);
|
|
536
|
-
frame.appendChild(moveUpButton);
|
|
537
|
-
frame.appendChild(moveDownButton);
|
|
538
|
-
moveUpButton.style.gridColumn = 2;
|
|
539
|
-
moveDownButton.style.gridColumn = 2;
|
|
540
|
-
moveUpButton.style.gridRow = 1;
|
|
541
|
-
moveDownButton.style.padding = '0em'; // don't take too much space
|
|
542
|
-
moveUpButton.style.padding = '0em';
|
|
543
|
-
moveDownButton.style.gridRow = 2;
|
|
544
|
-
_shim.style.gridColumn = 1;
|
|
545
|
-
_shim.style.gridRowStart = 'span 2'; // Cover both rows
|
|
546
|
-
// shim.style.gridRowEnd = 2 // Cover both rows
|
|
547
|
-
return frame;
|
|
548
|
-
}
|
|
549
|
-
}
|
|
550
|
-
return subField; // unused
|
|
551
|
-
} // renderItem
|
|
552
|
-
|
|
553
|
-
/// ///////// Body of Multiple form field implementation
|
|
554
|
-
|
|
555
|
-
var plusIconURI = _iconBase.icons.iconBase + 'noun_19460_green.svg'; // white plus in green circle
|
|
556
|
-
|
|
557
|
-
var kb = _solidLogic.store;
|
|
558
|
-
var formDoc = form.doc ? form.doc() : null; // @@ if blank no way to know
|
|
559
|
-
|
|
560
|
-
var box = dom.createElement('div');
|
|
561
|
-
var shim = box; // no shim
|
|
562
|
-
// We don't indent multiple as it is a sort of a prefix of the next field and has contents of one.
|
|
563
|
-
// box.setAttribute('style', 'padding-left: 2em; border: 0.05em solid green;') // Indent a multiple
|
|
564
|
-
var ui = ns.ui;
|
|
565
|
-
if (container) container.appendChild(box);
|
|
566
|
-
var orderedNode = kb.any(form, ui('ordered'));
|
|
567
|
-
var ordered = orderedNode ? $rdf.Node.toJS(orderedNode) : false;
|
|
568
|
-
var property = kb.any(form, ui('property'));
|
|
569
|
-
var reverse = kb.anyJS(form, ui('reverse'), null, formDoc);
|
|
570
|
-
if (!property) {
|
|
571
|
-
box.appendChild((0, _error.errorMessageBlock)(dom, 'No property to multiple: ' + form)); // used for arcs in the data
|
|
572
|
-
return shim;
|
|
573
|
-
}
|
|
574
|
-
var multipleUIlabel = kb.any(form, ui('label'));
|
|
575
|
-
if (!multipleUIlabel) multipleUIlabel = utils.label(property);
|
|
576
|
-
var min = kb.any(form, ui('min')); // This is the minimum number -- default 0
|
|
577
|
-
min = min ? 0 + min.value : 0;
|
|
578
|
-
var element = kb.any(form, ui('part')); // This is the form to use for each one
|
|
579
|
-
if (!element) {
|
|
580
|
-
box.appendChild((0, _error.errorMessageBlock)(dom, 'No part to multiple: ' + form));
|
|
581
|
-
return shim;
|
|
582
|
-
}
|
|
583
|
-
var body = box.appendChild(dom.createElement('div'));
|
|
584
|
-
body.style.display = 'flex';
|
|
585
|
-
body.style.flexDirection = 'column';
|
|
586
|
-
var list; // The RDF collection which keeps the ordered version or null
|
|
587
|
-
var values; // Initial values - always an array. Even when no list yet.
|
|
588
|
-
values = reverse ? kb.any(null, property, subject, dataDoc) : kb.any(subject, property, null, dataDoc);
|
|
589
|
-
if (ordered) {
|
|
590
|
-
list = reverse ? kb.any(null, property, subject, dataDoc) : kb.any(subject, property, null, dataDoc);
|
|
591
|
-
if (list) {
|
|
592
|
-
values = list.elements;
|
|
593
|
-
} else {
|
|
594
|
-
values = [];
|
|
595
|
-
}
|
|
596
|
-
} else {
|
|
597
|
-
values = reverse ? kb.each(null, property, subject, dataDoc) : kb.each(subject, property, null, dataDoc);
|
|
598
|
-
list = null;
|
|
599
|
-
}
|
|
600
|
-
// Add control on the bottom for adding more items
|
|
601
|
-
if (kb.updater.editable(dataDoc.uri)) {
|
|
602
|
-
var tail = box.appendChild(dom.createElement('div'));
|
|
603
|
-
tail.style.padding = '0.5em';
|
|
604
|
-
var img = tail.appendChild(dom.createElement('img'));
|
|
605
|
-
img.setAttribute('src', plusIconURI); // plus sign
|
|
606
|
-
img.setAttribute('style', 'margin: 0.2em; width: 1.5em; height:1.5em');
|
|
607
|
-
img.title = 'Click to add another ' + multipleUIlabel;
|
|
608
|
-
var prompt = dom.createElement('span');
|
|
609
|
-
prompt.textContent = (values.length === 0 ? 'Add another ' : 'Add ') + multipleUIlabel;
|
|
610
|
-
tail.addEventListener('click', /*#__PURE__*/function () {
|
|
611
|
-
var _ref3 = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee5(_eventNotUsed) {
|
|
612
|
-
return _regenerator["default"].wrap(function (_context5) {
|
|
613
|
-
while (1) switch (_context5.prev = _context5.next) {
|
|
614
|
-
case 0:
|
|
615
|
-
_context5.next = 1;
|
|
616
|
-
return addItem();
|
|
617
|
-
case 1:
|
|
618
|
-
case "end":
|
|
619
|
-
return _context5.stop();
|
|
620
|
-
}
|
|
621
|
-
}, _callee5);
|
|
622
|
-
}));
|
|
623
|
-
return function (_x5) {
|
|
624
|
-
return _ref3.apply(this, arguments);
|
|
625
|
-
};
|
|
626
|
-
}(), true);
|
|
627
|
-
tail.appendChild(prompt);
|
|
628
|
-
}
|
|
629
|
-
function createListIfNecessary() {
|
|
630
|
-
if (!list) {
|
|
631
|
-
list = new $rdf.Collection();
|
|
632
|
-
if (reverse) {
|
|
633
|
-
kb.add(list, property, subject, dataDoc);
|
|
634
|
-
} else {
|
|
635
|
-
kb.add(subject, property, list, dataDoc);
|
|
636
|
-
}
|
|
637
|
-
}
|
|
638
|
-
}
|
|
639
|
-
function saveListThenRefresh() {
|
|
640
|
-
return _saveListThenRefresh.apply(this, arguments);
|
|
641
|
-
}
|
|
642
|
-
function _saveListThenRefresh() {
|
|
643
|
-
_saveListThenRefresh = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee7() {
|
|
644
|
-
var _t2;
|
|
645
|
-
return _regenerator["default"].wrap(function (_context7) {
|
|
646
|
-
while (1) switch (_context7.prev = _context7.next) {
|
|
647
|
-
case 0:
|
|
648
|
-
debug.log('save list: ' + debugString(list.elements)); // 20191214
|
|
649
|
-
|
|
650
|
-
createListIfNecessary();
|
|
651
|
-
_context7.prev = 1;
|
|
652
|
-
_context7.next = 2;
|
|
653
|
-
return kb.fetcher.putBack(dataDoc);
|
|
654
|
-
case 2:
|
|
655
|
-
_context7.next = 4;
|
|
656
|
-
break;
|
|
657
|
-
case 3:
|
|
658
|
-
_context7.prev = 3;
|
|
659
|
-
_t2 = _context7["catch"](1);
|
|
660
|
-
box.appendChild((0, _error.errorMessageBlock)(dom, 'Error trying to put back a list: ' + _t2));
|
|
661
|
-
return _context7.abrupt("return");
|
|
662
|
-
case 4:
|
|
663
|
-
refresh();
|
|
664
|
-
case 5:
|
|
665
|
-
case "end":
|
|
666
|
-
return _context7.stop();
|
|
667
|
-
}
|
|
668
|
-
}, _callee7, null, [[1, 3]]);
|
|
669
|
-
}));
|
|
670
|
-
return _saveListThenRefresh.apply(this, arguments);
|
|
671
|
-
}
|
|
672
|
-
function refresh() {
|
|
673
|
-
var vals;
|
|
674
|
-
if (ordered) {
|
|
675
|
-
var li = reverse ? kb.the(null, property, subject, dataDoc) : kb.the(subject, property, null, dataDoc);
|
|
676
|
-
vals = li ? li.elements : [];
|
|
677
|
-
} else {
|
|
678
|
-
vals = reverse ? kb.each(null, property, subject, dataDoc) : kb.each(subject, property, null, dataDoc);
|
|
679
|
-
vals.sort(); // achieve consistency on each refresh
|
|
680
|
-
}
|
|
681
|
-
utils.syncTableToArrayReOrdered(body, vals, renderItem);
|
|
682
|
-
}
|
|
683
|
-
body.refresh = refresh; // Allow live update
|
|
684
|
-
refresh();
|
|
685
|
-
function asyncStuff() {
|
|
686
|
-
return _asyncStuff.apply(this, arguments);
|
|
687
|
-
}
|
|
688
|
-
function _asyncStuff() {
|
|
689
|
-
_asyncStuff = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee8() {
|
|
690
|
-
var extra, j;
|
|
691
|
-
return _regenerator["default"].wrap(function (_context8) {
|
|
692
|
-
while (1) switch (_context8.prev = _context8.next) {
|
|
693
|
-
case 0:
|
|
694
|
-
extra = min - values.length;
|
|
695
|
-
if (!(extra > 0)) {
|
|
696
|
-
_context8.next = 4;
|
|
697
|
-
break;
|
|
698
|
-
}
|
|
699
|
-
j = 0;
|
|
700
|
-
case 1:
|
|
701
|
-
if (!(j < extra)) {
|
|
702
|
-
_context8.next = 3;
|
|
703
|
-
break;
|
|
704
|
-
}
|
|
705
|
-
debug.log('Adding extra: min ' + min);
|
|
706
|
-
_context8.next = 2;
|
|
707
|
-
return addItem();
|
|
708
|
-
case 2:
|
|
709
|
-
j++;
|
|
710
|
-
_context8.next = 1;
|
|
711
|
-
break;
|
|
712
|
-
case 3:
|
|
713
|
-
_context8.next = 4;
|
|
714
|
-
return saveListThenRefresh();
|
|
715
|
-
case 4:
|
|
716
|
-
case "end":
|
|
717
|
-
return _context8.stop();
|
|
718
|
-
}
|
|
719
|
-
}, _callee8);
|
|
720
|
-
}));
|
|
721
|
-
return _asyncStuff.apply(this, arguments);
|
|
722
|
-
}
|
|
723
|
-
asyncStuff().then(function () {
|
|
724
|
-
debug.log(' Multiple render: async stuff ok');
|
|
725
|
-
}, function (err) {
|
|
726
|
-
debug.error(' Multiple render: async stuff fails. #### ', err);
|
|
727
|
-
}); // async
|
|
728
|
-
|
|
729
|
-
return shim;
|
|
730
|
-
}; // Multiple
|
|
731
|
-
|
|
732
|
-
/* Text field
|
|
733
|
-
**
|
|
734
|
-
*/
|
|
735
|
-
// For possible date popups see e.g. http://www.dynamicdrive.com/dynamicindex7/jasoncalendar.htm
|
|
736
|
-
// or use HTML5: http://www.w3.org/TR/2011/WD-html-markup-20110113/input.date.html
|
|
737
|
-
//
|
|
738
|
-
|
|
739
|
-
_fieldFunction.field[ns.ui('PhoneField').uri] = _basic.basicField;
|
|
740
|
-
_fieldFunction.field[ns.ui('EmailField').uri] = _basic.basicField;
|
|
741
|
-
_fieldFunction.field[ns.ui('ColorField').uri] = _basic.basicField;
|
|
742
|
-
_fieldFunction.field[ns.ui('DateField').uri] = _basic.basicField;
|
|
743
|
-
_fieldFunction.field[ns.ui('DateTimeField').uri] = _basic.basicField;
|
|
744
|
-
_fieldFunction.field[ns.ui('TimeField').uri] = _basic.basicField;
|
|
745
|
-
_fieldFunction.field[ns.ui('NumericField').uri] = _basic.basicField;
|
|
746
|
-
_fieldFunction.field[ns.ui('IntegerField').uri] = _basic.basicField;
|
|
747
|
-
_fieldFunction.field[ns.ui('DecimalField').uri] = _basic.basicField;
|
|
748
|
-
_fieldFunction.field[ns.ui('FloatField').uri] = _basic.basicField;
|
|
749
|
-
_fieldFunction.field[ns.ui('TextField').uri] = _basic.basicField;
|
|
750
|
-
_fieldFunction.field[ns.ui('SingleLineTextField').uri] = _basic.basicField;
|
|
751
|
-
_fieldFunction.field[ns.ui('NamedNodeURIField').uri] = _basic.basicField;
|
|
752
|
-
|
|
753
|
-
/* Multiline Text field
|
|
754
|
-
**
|
|
755
|
-
*/
|
|
756
|
-
|
|
757
|
-
_fieldFunction.field[ns.ui('MultiLineTextField').uri] = function (dom, container, already, subject, form, dataDoc, callbackFunction) {
|
|
758
|
-
var ui = ns.ui;
|
|
759
|
-
var kb = _solidLogic.store;
|
|
760
|
-
var formDoc = form.doc ? form.doc() : null; // @@ if blank no way to know
|
|
761
|
-
|
|
762
|
-
var property = kb.any(form, ui('property'));
|
|
763
|
-
if (!property) {
|
|
764
|
-
return (0, _error.errorMessageBlock)(dom, 'No property to text field: ' + form);
|
|
765
|
-
}
|
|
766
|
-
var box = dom.createElement('div');
|
|
767
|
-
box.style.display = 'flex';
|
|
768
|
-
box.style.flexDirection = 'row';
|
|
769
|
-
var left = box.appendChild(dom.createElement('div'));
|
|
770
|
-
left.style.width = _styleConstants["default"].formFieldNameBoxWidth;
|
|
771
|
-
var right = box.appendChild(dom.createElement('div'));
|
|
772
|
-
left.appendChild((0, _basic.fieldLabel)(dom, property, form));
|
|
773
|
-
dataDoc = (0, _basic.fieldStore)(subject, property, dataDoc);
|
|
774
|
-
var text = kb.anyJS(subject, property, null, dataDoc) || '';
|
|
775
|
-
var editable = kb.updater.editable(dataDoc.uri);
|
|
776
|
-
var suppressEmptyUneditable = form && kb.anyJS(form, ns.ui('suppressEmptyUneditable'), null, formDoc);
|
|
777
|
-
if (!editable && suppressEmptyUneditable && text === '') {
|
|
778
|
-
box.style.display = 'none';
|
|
779
|
-
}
|
|
780
|
-
var field = makeDescription(dom, kb, subject, property, dataDoc, callbackFunction);
|
|
781
|
-
right.appendChild(field);
|
|
782
|
-
if (container) container.appendChild(box);
|
|
783
|
-
return box;
|
|
784
|
-
};
|
|
785
|
-
|
|
786
|
-
/* Boolean field and Tri-state version (true/false/null)
|
|
787
|
-
**
|
|
788
|
-
** @@ todo: remove tristate param
|
|
789
|
-
*/
|
|
790
|
-
function booleanField(dom, container, already, subject, form, dataDoc, callbackFunction, tristate) {
|
|
791
|
-
var ui = ns.ui;
|
|
792
|
-
var kb = _solidLogic.store;
|
|
793
|
-
var property = kb.any(form, ui('property'));
|
|
794
|
-
if (!property) {
|
|
795
|
-
var errorBlock = (0, _error.errorMessageBlock)(dom, 'No property to boolean field: ' + form);
|
|
796
|
-
if (container) container.appendChild(errorBlock);
|
|
797
|
-
return errorBlock;
|
|
798
|
-
}
|
|
799
|
-
var lab = kb.any(form, ui('label'));
|
|
800
|
-
if (!lab) lab = utils.label(property, true); // Init capital
|
|
801
|
-
dataDoc = (0, _basic.fieldStore)(subject, property, dataDoc);
|
|
802
|
-
var state = kb.any(subject, property);
|
|
803
|
-
if (state === undefined) {
|
|
804
|
-
state = false;
|
|
805
|
-
} // @@ sure we want that -- or three-state?
|
|
806
|
-
var ins = $rdf.st(subject, property, true, dataDoc);
|
|
807
|
-
var del = $rdf.st(subject, property, false, dataDoc);
|
|
808
|
-
var box = buildCheckboxForm(dom, kb, lab, del, ins, form, dataDoc, tristate);
|
|
809
|
-
if (container) container.appendChild(box);
|
|
810
|
-
return box;
|
|
811
|
-
}
|
|
812
|
-
_fieldFunction.field[ns.ui('BooleanField').uri] = function (dom, container, already, subject, form, dataDoc, callbackFunction) {
|
|
813
|
-
return booleanField(dom, container, already, subject, form, dataDoc, callbackFunction, false);
|
|
814
|
-
};
|
|
815
|
-
_fieldFunction.field[ns.ui('TristateField').uri] = function (dom, container, already, subject, form, dataDoc, callbackFunction) {
|
|
816
|
-
return booleanField(dom, container, already, subject, form, dataDoc, callbackFunction, true);
|
|
817
|
-
};
|
|
818
|
-
|
|
819
|
-
/* Classifier field
|
|
820
|
-
**
|
|
821
|
-
** Nested categories
|
|
822
|
-
**
|
|
823
|
-
** @@ To do: If a classification changes, then change any dependent Options fields.
|
|
824
|
-
*/
|
|
825
|
-
|
|
826
|
-
_fieldFunction.field[ns.ui('Classifier').uri] = function (dom, container, already, subject, form, dataDoc, callbackFunction) {
|
|
827
|
-
var kb = _solidLogic.store;
|
|
828
|
-
var ui = ns.ui;
|
|
829
|
-
var category = kb.any(form, ui('category'));
|
|
830
|
-
if (!category) {
|
|
831
|
-
return (0, _error.errorMessageBlock)(dom, 'No category for classifier: ' + form);
|
|
832
|
-
}
|
|
833
|
-
log.debug('Classifier: dataDoc=' + dataDoc);
|
|
834
|
-
var checkOptions = function checkOptions(ok, body) {
|
|
835
|
-
if (!ok) return callbackFunction(ok, body);
|
|
836
|
-
return callbackFunction(ok, body);
|
|
837
|
-
};
|
|
838
|
-
var box = makeSelectForNestedCategory(dom, kb, subject, category, dataDoc, checkOptions);
|
|
839
|
-
if (container) container.appendChild(box);
|
|
840
|
-
return box;
|
|
841
|
-
};
|
|
842
|
-
|
|
843
|
-
/** Choice field
|
|
844
|
-
**
|
|
845
|
-
** Not nested. Generates a link to something from a given class.
|
|
846
|
-
** Optional subform for the thing selected.
|
|
847
|
-
** Generates a subForm based on a ui:use form
|
|
848
|
-
** Will look like:
|
|
849
|
-
** <div id=dropDownDiv>
|
|
850
|
-
** <div id=labelOfDropDown>
|
|
851
|
-
** <div id=selectDiv>
|
|
852
|
-
** <select id=dropDownSelect>
|
|
853
|
-
** <option> ....
|
|
854
|
-
** <subForm>
|
|
855
|
-
** Alternative implementatons could be:
|
|
856
|
-
** -- pop-up menu (as here)
|
|
857
|
-
** -- radio buttons
|
|
858
|
-
** -- auto-complete typing
|
|
859
|
-
**
|
|
860
|
-
** TODO: according to ontology ui:choice can also have ns.ui('default') - this is not implemented yet
|
|
861
|
-
*/
|
|
862
|
-
|
|
863
|
-
_fieldFunction.field[ns.ui('Choice').uri] = function (dom, container, already, subject, form, dataDoc, callbackFunction) {
|
|
864
|
-
var ui = ns.ui;
|
|
865
|
-
var kb = _solidLogic.store;
|
|
866
|
-
var formDoc = form.doc ? form.doc() : null; // @@ if blank no way to know
|
|
867
|
-
|
|
868
|
-
var p;
|
|
869
|
-
var box = dom.createElement('div');
|
|
870
|
-
box.setAttribute('class', 'choiceBox');
|
|
871
|
-
// Set flexDirection column?
|
|
872
|
-
if (container) container.appendChild(box);
|
|
873
|
-
var lhs = dom.createElement('div');
|
|
874
|
-
lhs.setAttribute('class', 'formFieldName choiceBox-label');
|
|
875
|
-
box.appendChild(lhs);
|
|
876
|
-
var rhs = dom.createElement('div');
|
|
877
|
-
rhs.setAttribute('class', 'formFieldValue choiceBox-selectBox');
|
|
878
|
-
box.appendChild(rhs);
|
|
879
|
-
var property = kb.any(form, ui('property'));
|
|
880
|
-
if (!property) {
|
|
881
|
-
return box.appendChild((0, _error.errorMessageBlock)(dom, 'No property for Choice: ' + form));
|
|
882
|
-
}
|
|
883
|
-
lhs.appendChild((0, _basic.fieldLabel)(dom, property, form));
|
|
884
|
-
var uiFrom = kb.any(form, ui('from'));
|
|
885
|
-
if (!uiFrom) {
|
|
886
|
-
return (0, _error.errorMessageBlock)(dom, "No 'from' for Choice: " + form);
|
|
887
|
-
}
|
|
888
|
-
var subForm = kb.any(form, ui('use')); // Optional
|
|
889
|
-
// const follow = kb.anyJS(form, ui('follow'), null, formDoc) // data doc moves to new subject?
|
|
890
|
-
|
|
891
|
-
var opts = {
|
|
892
|
-
form: form,
|
|
893
|
-
subForm: subForm,
|
|
894
|
-
disambiguate: false
|
|
895
|
-
};
|
|
896
|
-
function getSelectorOptions(dataSource) {
|
|
897
|
-
var possible = [];
|
|
898
|
-
var possibleProperties;
|
|
899
|
-
possible = kb.each(undefined, ns.rdf('type'), uiFrom, formDoc);
|
|
900
|
-
for (var x in findMembersNT(kb, uiFrom, dataSource)) {
|
|
901
|
-
possible.push(kb.fromNT(x));
|
|
902
|
-
} // Use rdfs
|
|
903
|
-
|
|
904
|
-
if (uiFrom.sameTerm(ns.rdfs('Class'))) {
|
|
905
|
-
for (p in buttons.allClassURIs()) possible.push(kb.sym(p));
|
|
906
|
-
// log.debug("%%% Choice field: possible.length 2 = "+possible.length)
|
|
907
|
-
} else if (uiFrom.sameTerm(ns.rdf('Property'))) {
|
|
908
|
-
possibleProperties = buttons.propertyTriage(kb);
|
|
909
|
-
for (p in possibleProperties.op) possible.push(kb.fromNT(p));
|
|
910
|
-
for (p in possibleProperties.dp) possible.push(kb.fromNT(p));
|
|
911
|
-
opts.disambiguate = true; // This is a big class, and the labels won't be enough.
|
|
912
|
-
} else if (uiFrom.sameTerm(ns.owl('ObjectProperty'))) {
|
|
913
|
-
possibleProperties = buttons.propertyTriage(kb);
|
|
914
|
-
for (p in possibleProperties.op) possible.push(kb.fromNT(p));
|
|
915
|
-
opts.disambiguate = true;
|
|
916
|
-
} else if (uiFrom.sameTerm(ns.owl('DatatypeProperty'))) {
|
|
917
|
-
possibleProperties = buttons.propertyTriage(kb);
|
|
918
|
-
for (p in possibleProperties.dp) possible.push(kb.fromNT(p));
|
|
919
|
-
opts.disambiguate = true;
|
|
920
|
-
}
|
|
921
|
-
return possible;
|
|
922
|
-
// return sortByLabel(possible)
|
|
923
|
-
}
|
|
924
|
-
|
|
925
|
-
// TODO: this checks for any occurrence, regardless of true or false setting
|
|
926
|
-
if (kb.any(form, ui('canMintNew'))) {
|
|
927
|
-
opts.mint = '* Create new *'; // @@ could be better
|
|
928
|
-
}
|
|
929
|
-
var multiSelect = kb.any(form, ui('multiselect')); // Optional
|
|
930
|
-
if (multiSelect) opts.multiSelect = true;
|
|
931
|
-
|
|
932
|
-
// by default searches the dataDoc graph or optionally the full store
|
|
933
|
-
var dataSource = kb.each(form, ui('search-full-store')).length ? null : dataDoc; // optional
|
|
934
|
-
|
|
935
|
-
var selector;
|
|
936
|
-
rhs.refresh = function () {
|
|
937
|
-
// from ui:property
|
|
938
|
-
var selectedOptions = kb.each(subject, property, null, dataDoc).map(function (object) {
|
|
939
|
-
return object.value;
|
|
940
|
-
});
|
|
941
|
-
// from ui:from + ui:property
|
|
942
|
-
var possibleOptions = getSelectorOptions(dataSource);
|
|
943
|
-
possibleOptions.push(selectedOptions);
|
|
944
|
-
possibleOptions = sortByLabel(possibleOptions);
|
|
945
|
-
selector = makeSelectForChoice(dom, rhs, kb, subject, property, possibleOptions, selectedOptions, uiFrom, opts, dataDoc, callbackFunction);
|
|
946
|
-
rhs.innerHTML = '';
|
|
947
|
-
rhs.appendChild(selector);
|
|
948
|
-
if (multiSelect) {
|
|
949
|
-
var multiSelectDiv = new _multiSelect.IconicMultiSelect({
|
|
950
|
-
placeholder: selector.selected,
|
|
951
|
-
select: selector,
|
|
952
|
-
container: rhs,
|
|
953
|
-
textField: 'textField',
|
|
954
|
-
valueField: 'valueField'
|
|
955
|
-
});
|
|
956
|
-
multiSelectDiv.init();
|
|
957
|
-
multiSelectDiv.subscribe(function (event) {
|
|
958
|
-
if (event.action === 'REMOVE_OPTION') {
|
|
959
|
-
selectedOptions = selectedOptions.filter(function (value) {
|
|
960
|
-
return value !== event.value;
|
|
961
|
-
});
|
|
962
|
-
}
|
|
963
|
-
if (event.action === 'CLEAR_ALL_OPTIONS') {
|
|
964
|
-
selectedOptions = [];
|
|
965
|
-
}
|
|
966
|
-
if (event.action === 'ADD_OPTION') {
|
|
967
|
-
var stringValue = event.value + '';
|
|
968
|
-
if (stringValue.includes('Create new')) {
|
|
969
|
-
var newObject = newThing(dataDoc);
|
|
970
|
-
var is = [];
|
|
971
|
-
is.push($rdf.st(subject, property, kb.sym(newObject), dataDoc));
|
|
972
|
-
if (uiFrom) is.push($rdf.st(newObject, ns.rdf('type'), kb.sym(uiFrom), dataDoc));
|
|
973
|
-
if (subForm) {
|
|
974
|
-
addSubFormChoice(dom, rhs, {}, $rdf.sym(newObject), subForm, dataDoc, function (ok, body) {
|
|
975
|
-
if (ok) {
|
|
976
|
-
kb.updater.update([], is, function (uri, success, errorBody) {
|
|
977
|
-
if (!success) rhs.appendChild((0, _error.errorMessageBlock)(dom, 'Error updating select: ' + errorBody));
|
|
978
|
-
});
|
|
979
|
-
selectedOptions.push(newObject);
|
|
980
|
-
if (callbackFunction) callbackFunction(ok, {
|
|
981
|
-
widget: 'select',
|
|
982
|
-
event: 'new'
|
|
983
|
-
});
|
|
984
|
-
} else {
|
|
985
|
-
rhs.appendChild((0, _error.errorMessageBlock)(dom, 'Error updating data in field of select: ' + body));
|
|
986
|
-
}
|
|
987
|
-
});
|
|
988
|
-
}
|
|
989
|
-
} else selectedOptions.push(event.value);
|
|
990
|
-
}
|
|
991
|
-
selector.update(selectedOptions);
|
|
992
|
-
});
|
|
993
|
-
}
|
|
994
|
-
};
|
|
995
|
-
rhs.refresh();
|
|
996
|
-
if (selector && selector.refresh) selector.refresh();
|
|
997
|
-
return box;
|
|
998
|
-
};
|
|
999
|
-
function addSubFormChoice(dom, selectDiv, already, subject, subForm, dataDoc, callbackFunction) {
|
|
1000
|
-
(0, _fieldFunction.fieldFunction)(dom, subForm)(dom, selectDiv, already, subject, subForm, dataDoc, callbackFunction);
|
|
1001
|
-
}
|
|
1002
|
-
|
|
1003
|
-
// Documentation - non-interactive fields
|
|
1004
|
-
//
|
|
1005
|
-
|
|
1006
|
-
_fieldFunction.field[ns.ui('Comment').uri] = _fieldFunction.field[ns.ui('Heading').uri] = function (dom, container, already, subject, form, dataDoc, _callbackFunction) {
|
|
1007
|
-
var ui = ns.ui;
|
|
1008
|
-
var kb = _solidLogic.store;
|
|
1009
|
-
var contents = kb.any(form, ui('contents'));
|
|
1010
|
-
if (!contents) contents = 'Error: No contents in comment field.';
|
|
1011
|
-
var formDoc = form.doc ? form.doc() : null; // @@ if blank no way to know
|
|
1012
|
-
|
|
1013
|
-
var uri = (0, _fieldFunction.mostSpecificClassURI)(form);
|
|
1014
|
-
var params = _fieldParams.fieldParams[uri] || {};
|
|
1015
|
-
var box = dom.createElement('div');
|
|
1016
|
-
if (container) container.appendChild(box);
|
|
1017
|
-
var p = box.appendChild(dom.createElement(params.element));
|
|
1018
|
-
p.textContent = contents;
|
|
1019
|
-
(0, _formStyle.setFieldStyle)(p, form);
|
|
1020
|
-
|
|
1021
|
-
// Some headings and prompts are only useful to guide user input
|
|
1022
|
-
var suppressIfUneditable = kb.anyJS(form, ns.ui('suppressIfUneditable'), null, formDoc);
|
|
1023
|
-
var editable = kb.updater.editable(dataDoc.uri);
|
|
1024
|
-
if (suppressIfUneditable && !editable) {
|
|
1025
|
-
box.style.display = 'none';
|
|
1026
|
-
}
|
|
1027
|
-
return box;
|
|
1028
|
-
};
|
|
1029
|
-
|
|
1030
|
-
// A button for editing a form (in place, at the moment)
|
|
1031
|
-
//
|
|
1032
|
-
// When editing forms, make it yellow, when editing thr form form, pink
|
|
1033
|
-
// Help people understand how many levels down they are.
|
|
1034
|
-
//
|
|
1035
|
-
function editFormButton(dom, container, form, dataDoc, callbackFunction) {
|
|
1036
|
-
var b = dom.createElement('button');
|
|
1037
|
-
b.setAttribute('type', 'button');
|
|
1038
|
-
b.innerHTML = 'Edit ' + utils.label(ns.ui('Form'));
|
|
1039
|
-
b.addEventListener('click', function (_e) {
|
|
1040
|
-
var ff = appendForm(dom, container, {}, form, ns.ui('FormForm'), dataDoc, callbackFunction);
|
|
1041
|
-
ff.setAttribute('style', ns.ui('FormForm').sameTerm(form) ? 'background-color: #fee;' : 'background-color: #ffffe7;');
|
|
1042
|
-
b.parentNode.removeChild(b);
|
|
1043
|
-
}, true);
|
|
1044
|
-
return b;
|
|
1045
|
-
}
|
|
1046
|
-
function appendForm(dom, container, already, subject, form, dataDoc, itemDone) {
|
|
1047
|
-
return (0, _fieldFunction.fieldFunction)(dom, form)(dom, container, already, subject, form, dataDoc, itemDone);
|
|
1048
|
-
}
|
|
1049
|
-
|
|
1050
|
-
/** Find list of properties for class
|
|
1051
|
-
//
|
|
1052
|
-
// Three possible sources: Those mentioned in schemas, which exludes many
|
|
1053
|
-
// those which occur in the data we already have, and those predicates we
|
|
1054
|
-
// have come across anywhere and which are not explicitly excluded from
|
|
1055
|
-
// being used with this class.
|
|
1056
|
-
*/
|
|
1057
|
-
|
|
1058
|
-
function propertiesForClass(kb, c) {
|
|
1059
|
-
var explicit = kb.each(undefined, ns.rdf('range'), c);
|
|
1060
|
-
[ns.rdfs('comment'), ns.dc('title'),
|
|
1061
|
-
// Generic things
|
|
1062
|
-
ns.foaf('name'), ns.foaf('homepage')].forEach(function (x) {
|
|
1063
|
-
explicit.push(x);
|
|
1064
|
-
});
|
|
1065
|
-
var members = kb.each(undefined, ns.rdf('type'), c);
|
|
1066
|
-
if (members.length > 60) members = members.slice(0, 60); // Array supports slice?
|
|
1067
|
-
var used = {};
|
|
1068
|
-
for (var i = 0; i < (members.length > 60 ? 60 : members.length); i++) {
|
|
1069
|
-
kb.statementsMatching(members[i], undefined, undefined).forEach(function (st) {
|
|
1070
|
-
used[st.predicate.uri] = true;
|
|
1071
|
-
});
|
|
1072
|
-
}
|
|
1073
|
-
explicit.forEach(function (p) {
|
|
1074
|
-
used[p.uri] = true;
|
|
1075
|
-
});
|
|
1076
|
-
var result = [];
|
|
1077
|
-
for (var uri in used) {
|
|
1078
|
-
result.push(kb.sym(uri));
|
|
1079
|
-
}
|
|
1080
|
-
return result;
|
|
1081
|
-
}
|
|
1082
|
-
|
|
1083
|
-
/** Find the closest class
|
|
1084
|
-
* @param kb The quad store
|
|
1085
|
-
* @param cla - the URI of the class
|
|
1086
|
-
* @param prop
|
|
1087
|
-
*/
|
|
1088
|
-
function findClosest(kb, cla, prop) {
|
|
1089
|
-
var agenda = [kb.sym(cla)]; // ordered - this is breadth first search
|
|
1090
|
-
while (agenda.length > 0) {
|
|
1091
|
-
var c = agenda.shift(); // first
|
|
1092
|
-
var lists = kb.each(c, prop);
|
|
1093
|
-
log.debug('Lists for ' + c + ', ' + prop + ': ' + lists.length);
|
|
1094
|
-
if (lists.length !== 0) return lists;
|
|
1095
|
-
var supers = kb.each(c, ns.rdfs('subClassOf'));
|
|
1096
|
-
for (var i = 0; i < supers.length; i++) {
|
|
1097
|
-
agenda.push(supers[i]);
|
|
1098
|
-
log.debug('findClosest: add super: ' + supers[i]);
|
|
1099
|
-
}
|
|
1100
|
-
}
|
|
1101
|
-
return [];
|
|
1102
|
-
}
|
|
1103
|
-
|
|
1104
|
-
// Which forms apply to a given existing subject?
|
|
1105
|
-
|
|
1106
|
-
function formsFor(subject) {
|
|
1107
|
-
var kb = _solidLogic.store;
|
|
1108
|
-
log.debug('formsFor: subject=' + subject);
|
|
1109
|
-
var t = kb.findTypeURIs(subject);
|
|
1110
|
-
var t1;
|
|
1111
|
-
for (t1 in t) {
|
|
1112
|
-
log.debug(' type: ' + t1);
|
|
1113
|
-
}
|
|
1114
|
-
var bottom = kb.bottomTypeURIs(t); // most specific
|
|
1115
|
-
var candidates = [];
|
|
1116
|
-
for (var b in bottom) {
|
|
1117
|
-
// Find the most specific
|
|
1118
|
-
log.debug('candidatesFor: trying bottom type =' + b);
|
|
1119
|
-
candidates = candidates.concat(findClosest(kb, b, ns.ui('creationForm')));
|
|
1120
|
-
candidates = candidates.concat(findClosest(kb, b, ns.ui('annotationForm')));
|
|
1121
|
-
}
|
|
1122
|
-
return candidates;
|
|
1123
|
-
}
|
|
1124
|
-
function sortBySequence(list) {
|
|
1125
|
-
var subfields = list.map(function (p) {
|
|
1126
|
-
var k = kb.any(p, ns.ui('sequence'));
|
|
1127
|
-
return [k || 9999, p];
|
|
1128
|
-
});
|
|
1129
|
-
subfields.sort(function (a, b) {
|
|
1130
|
-
return a[0] - b[0];
|
|
1131
|
-
});
|
|
1132
|
-
return subfields.map(function (pair) {
|
|
1133
|
-
return pair[1];
|
|
1134
|
-
});
|
|
1135
|
-
}
|
|
1136
|
-
function sortByLabel(list) {
|
|
1137
|
-
var subfields = list.map(function (p) {
|
|
1138
|
-
return [utils.label(p).toLowerCase(), p];
|
|
1139
|
-
});
|
|
1140
|
-
subfields.sort();
|
|
1141
|
-
return subfields.map(function (pair) {
|
|
1142
|
-
return pair[1];
|
|
1143
|
-
});
|
|
1144
|
-
}
|
|
1145
|
-
|
|
1146
|
-
/** Button to add a new whatever using a form
|
|
1147
|
-
//
|
|
1148
|
-
// @param form - optional form , else will look for one
|
|
1149
|
-
// @param dataDoc - optional dataDoc else will prompt for one (unimplemented)
|
|
1150
|
-
*/
|
|
1151
|
-
function newButton(dom, kb, subject, predicate, theClass, form, dataDoc, callbackFunction) {
|
|
1152
|
-
var b = dom.createElement('button');
|
|
1153
|
-
b.setAttribute('type', 'button');
|
|
1154
|
-
b.innerHTML = 'New ' + utils.label(theClass);
|
|
1155
|
-
b.addEventListener('click', function (_e) {
|
|
1156
|
-
b.parentNode.appendChild(promptForNew(dom, kb, subject, predicate, theClass, form, dataDoc, callbackFunction));
|
|
1157
|
-
}, false);
|
|
1158
|
-
return b;
|
|
1159
|
-
}
|
|
1160
|
-
|
|
1161
|
-
/** Prompt for new object of a given class
|
|
1162
|
-
//
|
|
1163
|
-
// @param dom - the document DOM for the user interface
|
|
1164
|
-
// @param kb - the graph which is the knowledge base we are working with
|
|
1165
|
-
// @param subject - a term, Thing this should be linked to when made. Optional.
|
|
1166
|
-
// @param predicate - a term, the relationship for the subject link. Optional.
|
|
1167
|
-
// @param theClass - an RDFS class containng the object about which the new information is.
|
|
1168
|
-
// @param form - the form to be used when a new one. null means please find one.
|
|
1169
|
-
// @param dataDoc - The web document being edited
|
|
1170
|
-
// @param callbackFunction - takes (boolean ok, string errorBody)
|
|
1171
|
-
// @returns a dom object with the form DOM
|
|
1172
|
-
*/
|
|
1173
|
-
function promptForNew(dom, kb, subject, predicate, theClass, form, dataDoc, callbackFunction) {
|
|
1174
|
-
var box = dom.createElement('form');
|
|
1175
|
-
if (!form) {
|
|
1176
|
-
var lists = findClosest(kb, theClass.uri, ns.ui('creationForm'));
|
|
1177
|
-
if (lists.length === 0) {
|
|
1178
|
-
var p = box.appendChild(dom.createElement('p'));
|
|
1179
|
-
p.textContent = 'I am sorry, you need to provide information about a ' + utils.label(theClass) + " but I don't know enough information about those to ask you.";
|
|
1180
|
-
var b = box.appendChild(dom.createElement('button'));
|
|
1181
|
-
b.setAttribute('type', 'button');
|
|
1182
|
-
b.setAttribute('style', 'float: right;');
|
|
1183
|
-
b.innerHTML = 'Goto ' + utils.label(theClass);
|
|
1184
|
-
b.addEventListener('click',
|
|
1185
|
-
// TODO fix dependency cycle to solid-panes by calling outlineManager
|
|
1186
|
-
function (_e) {
|
|
1187
|
-
dom.outlineManager.GotoSubject(theClass, true, undefined, true, undefined);
|
|
1188
|
-
}, false);
|
|
1189
|
-
return box;
|
|
1190
|
-
}
|
|
1191
|
-
log.debug('lists[0] is ' + lists[0]);
|
|
1192
|
-
form = lists[0]; // Pick any one
|
|
1193
|
-
}
|
|
1194
|
-
log.debug('form is ' + form);
|
|
1195
|
-
box.setAttribute('style', "border: 0.05em solid ".concat(_styleConstants["default"].formBorderColor, "; color: ").concat(_styleConstants["default"].formBorderColor)); // @@color?
|
|
1196
|
-
box.innerHTML = '<h3>New ' + utils.label(theClass) + '</h3>';
|
|
1197
|
-
var formFunction = (0, _fieldFunction.fieldFunction)(dom, form);
|
|
1198
|
-
var object = newThing(dataDoc);
|
|
1199
|
-
var gotButton = false;
|
|
1200
|
-
var itemDone = function itemDone(ok, body) {
|
|
1201
|
-
if (!ok) return callbackFunction(ok, body);
|
|
1202
|
-
var insertMe = [];
|
|
1203
|
-
if (subject && !kb.holds(subject, predicate, object, dataDoc)) {
|
|
1204
|
-
insertMe.push($rdf.st(subject, predicate, object, dataDoc));
|
|
1205
|
-
}
|
|
1206
|
-
if (subject && !kb.holds(object, ns.rdf('type'), theClass, dataDoc)) {
|
|
1207
|
-
insertMe.push($rdf.st(object, ns.rdf('type'), theClass, dataDoc));
|
|
1208
|
-
}
|
|
1209
|
-
if (insertMe.length) {
|
|
1210
|
-
kb.updater.update([], insertMe, linkDone);
|
|
1211
|
-
} else {
|
|
1212
|
-
callbackFunction(true, body);
|
|
1213
|
-
}
|
|
1214
|
-
if (!gotButton) {
|
|
1215
|
-
gotButton = box.appendChild(buttons.linkButton(dom, object));
|
|
1216
|
-
}
|
|
1217
|
-
};
|
|
1218
|
-
function linkDone(uri, ok, body) {
|
|
1219
|
-
return callbackFunction(ok, body);
|
|
1220
|
-
}
|
|
1221
|
-
log.info('paneUtils Object is ' + object);
|
|
1222
|
-
var f = formFunction(dom, box, {}, object, form, dataDoc, itemDone);
|
|
1223
|
-
var rb = buttons.removeButton(dom, f);
|
|
1224
|
-
rb.setAttribute('style', 'float: right;');
|
|
1225
|
-
box.AJAR_subject = object;
|
|
1226
|
-
return box;
|
|
1227
|
-
}
|
|
1228
|
-
function makeDescription(dom, kb, subject, predicate, dataDoc, callbackFunction) {
|
|
1229
|
-
var group = dom.createElement('div');
|
|
1230
|
-
var desc = kb.anyJS(subject, predicate, null, dataDoc) || '';
|
|
1231
|
-
var field = dom.createElement('textarea');
|
|
1232
|
-
group.appendChild(field);
|
|
1233
|
-
field.rows = desc ? desc.split('\n').length + 2 : 2;
|
|
1234
|
-
field.cols = 80;
|
|
1235
|
-
field.setAttribute('style', style.multilineTextInputStyle);
|
|
1236
|
-
if (desc !== null) {
|
|
1237
|
-
field.value = desc;
|
|
1238
|
-
} else {
|
|
1239
|
-
// Unless you can make the predicate label disappear with the first click then this is over-cute
|
|
1240
|
-
// field.value = utils.label(predicate); // Was"enter a description here" @@ possibly: add prompt which disappears
|
|
1241
|
-
field.select(); // Select it ready for user input -- doesn't work
|
|
1242
|
-
}
|
|
1243
|
-
group.refresh = function () {
|
|
1244
|
-
var v = kb.any(subject, predicate, null, dataDoc);
|
|
1245
|
-
if (v && v.value !== field.value) {
|
|
1246
|
-
field.value = v.value; // don't touch widget if no change
|
|
1247
|
-
// @@ this is the place to color the field from the user who chanaged it
|
|
1248
|
-
}
|
|
1249
|
-
};
|
|
1250
|
-
function saveChange(_e) {
|
|
1251
|
-
submit.disabled = true;
|
|
1252
|
-
submit.setAttribute('style', 'visibility: hidden; float: right;'); // Keep UI clean
|
|
1253
|
-
field.disabled = true;
|
|
1254
|
-
field.style.color = _styleConstants["default"].textInputColorPending;
|
|
1255
|
-
var ds = kb.statementsMatching(subject, predicate, null, dataDoc);
|
|
1256
|
-
var is = $rdf.st(subject, predicate, field.value, dataDoc);
|
|
1257
|
-
kb.updater.update(ds, is, function (uri, ok, body) {
|
|
1258
|
-
if (ok) {
|
|
1259
|
-
field.style.color = _styleConstants["default"].textInputColor;
|
|
1260
|
-
field.disabled = false;
|
|
1261
|
-
} else {
|
|
1262
|
-
group.appendChild((0, _error.errorMessageBlock)(dom, 'Error (while saving change to ' + dataDoc.uri + '): ' + body));
|
|
1263
|
-
}
|
|
1264
|
-
if (callbackFunction) {
|
|
1265
|
-
callbackFunction(ok, body);
|
|
1266
|
-
}
|
|
1267
|
-
});
|
|
1268
|
-
}
|
|
1269
|
-
var editable = kb.updater.editable(dataDoc.uri);
|
|
1270
|
-
var submit;
|
|
1271
|
-
if (editable) {
|
|
1272
|
-
submit = widgets.continueButton(dom, saveChange);
|
|
1273
|
-
submit.disabled = true; // until the filled has been modified
|
|
1274
|
-
submit.style.visibility = 'hidden';
|
|
1275
|
-
submit.style["float"] = 'right';
|
|
1276
|
-
group.appendChild(submit);
|
|
1277
|
-
field.addEventListener('keyup', function (_e) {
|
|
1278
|
-
// Green means has been changed, not saved yet
|
|
1279
|
-
field.style.color = 'green'; // setAttribute('style', style + 'color: green;')
|
|
1280
|
-
if (submit) {
|
|
1281
|
-
submit.disabled = false;
|
|
1282
|
-
submit.style.visibility = ''; // Remove visibility: hidden
|
|
1283
|
-
}
|
|
1284
|
-
}, true);
|
|
1285
|
-
field.addEventListener('change', saveChange, true);
|
|
1286
|
-
} else {
|
|
1287
|
-
field.disabled = true; // @@ change color too
|
|
1288
|
-
field.style.backgroundColor = _styleConstants["default"].textInputBackgroundColorUneditable;
|
|
1289
|
-
}
|
|
1290
|
-
return group;
|
|
1291
|
-
}
|
|
1292
|
-
|
|
1293
|
-
/** Make SELECT element to select options
|
|
1294
|
-
//
|
|
1295
|
-
// @param subject - a term, the subject of the statement(s) being edited.
|
|
1296
|
-
// @param predicate - a term, the predicate of the statement(s) being edited
|
|
1297
|
-
// @param possible - a list of terms, the possible value the object can take
|
|
1298
|
-
// @param options.multiple - Boolean - Whether more than one at a time is allowed
|
|
1299
|
-
// @param options.nullLabel - a string to be displayed as the
|
|
1300
|
-
// option for none selected (for non multiple)
|
|
1301
|
-
// @param options.mint - User may create thing if this sent to the prompt string eg "New foo"
|
|
1302
|
-
// @param options.subForm - If mint, then the form to be used for minting the new thing
|
|
1303
|
-
// @param dataDoc - The web document being edited
|
|
1304
|
-
// @param callbackFunction - takes (boolean ok, string errorBody)
|
|
1305
|
-
*/
|
|
1306
|
-
function makeSelectForClassifierOptions(dom, kb, subject, predicate, possible, options, dataDoc, callbackFunction) {
|
|
1307
|
-
log.debug('Select list length now ' + possible.length);
|
|
1308
|
-
var n = 0;
|
|
1309
|
-
var uris = {}; // Count them
|
|
1310
|
-
var editable = kb.updater.editable(dataDoc.uri);
|
|
1311
|
-
for (var i = 0; i < possible.length; i++) {
|
|
1312
|
-
var sub = possible[i]; // @@ Maybe; make this so it works with blank nodes too
|
|
1313
|
-
if (!sub.uri) debug.warn("makeSelectForClassifierOptions: option does not have an uri: ".concat(sub, ", with predicate: ").concat(predicate));
|
|
1314
|
-
if (!sub.uri || sub.uri in uris) continue;
|
|
1315
|
-
uris[sub.uri] = true;
|
|
1316
|
-
n++;
|
|
1317
|
-
} // uris is now the set of possible options
|
|
1318
|
-
if (n === 0 && !options.mint) {
|
|
1319
|
-
return (0, _error.errorMessageBlock)(dom, "Can't do selector with no options, subject= " + subject + ' property = ' + predicate + '.');
|
|
1320
|
-
}
|
|
1321
|
-
log.debug('makeSelectForClassifierOptions: dataDoc=' + dataDoc);
|
|
1322
|
-
var actual;
|
|
1323
|
-
var getActual = function getActual() {
|
|
1324
|
-
actual = {};
|
|
1325
|
-
if (predicate.sameTerm(ns.rdf('type'))) {
|
|
1326
|
-
actual = kb.findTypeURIs(subject);
|
|
1327
|
-
} else {
|
|
1328
|
-
kb.each(subject, predicate, null, dataDoc).forEach(function (x) {
|
|
1329
|
-
actual[x.uri] = true;
|
|
1330
|
-
});
|
|
1331
|
-
}
|
|
1332
|
-
return actual;
|
|
1333
|
-
};
|
|
1334
|
-
actual = getActual();
|
|
1335
|
-
var onChange = function onChange(_e) {
|
|
1336
|
-
select.disabled = true; // until data written back - gives user feedback too
|
|
1337
|
-
var ds = [];
|
|
1338
|
-
var is = [];
|
|
1339
|
-
var removeValue = function removeValue(t) {
|
|
1340
|
-
if (kb.holds(subject, predicate, t, dataDoc)) {
|
|
1341
|
-
ds.push($rdf.st(subject, predicate, t, dataDoc));
|
|
1342
|
-
}
|
|
1343
|
-
};
|
|
1344
|
-
var newObject;
|
|
1345
|
-
for (var _i = 0; _i < select.options.length; _i++) {
|
|
1346
|
-
var opt = select.options[_i];
|
|
1347
|
-
if (opt.selected && opt.AJAR_mint) {
|
|
1348
|
-
if (options.mintClass) {
|
|
1349
|
-
var thisForm = promptForNew(dom, kb, subject, predicate, options.mintClass, null, dataDoc, function (ok, body) {
|
|
1350
|
-
if (!ok) {
|
|
1351
|
-
callbackFunction(ok, body, {
|
|
1352
|
-
change: 'new'
|
|
1353
|
-
}); // @@ if ok, need some form of refresh of the select for the new thing
|
|
1354
|
-
}
|
|
1355
|
-
});
|
|
1356
|
-
select.parentNode.appendChild(thisForm);
|
|
1357
|
-
newObject = thisForm.AJAR_subject;
|
|
1358
|
-
} else {
|
|
1359
|
-
newObject = newThing(dataDoc);
|
|
1360
|
-
}
|
|
1361
|
-
is.push($rdf.st(subject, predicate, newObject, dataDoc));
|
|
1362
|
-
if (options.mintStatementsFun) {
|
|
1363
|
-
is = is.concat(options.mintStatementsFun(newObject));
|
|
1364
|
-
}
|
|
1365
|
-
}
|
|
1366
|
-
if (!opt.AJAR_uri) continue; // a prompt or mint
|
|
1367
|
-
if (opt.selected && !(opt.AJAR_uri in actual)) {
|
|
1368
|
-
// new class
|
|
1369
|
-
is.push($rdf.st(subject, predicate, kb.sym(opt.AJAR_uri), dataDoc));
|
|
1370
|
-
}
|
|
1371
|
-
if (!opt.selected && opt.AJAR_uri in actual) {
|
|
1372
|
-
// old class
|
|
1373
|
-
removeValue(kb.sym(opt.AJAR_uri));
|
|
1374
|
-
}
|
|
1375
|
-
if (opt.selected) select.currentURI = opt.AJAR_uri;
|
|
1376
|
-
}
|
|
1377
|
-
var sel = select.subSelect; // All subclasses must also go
|
|
1378
|
-
while (sel && sel.currentURI) {
|
|
1379
|
-
removeValue(kb.sym(sel.currentURI));
|
|
1380
|
-
sel = sel.subSelect;
|
|
1381
|
-
}
|
|
1382
|
-
sel = select.superSelect; // All superclasses are redundant
|
|
1383
|
-
while (sel && sel.currentURI) {
|
|
1384
|
-
removeValue(kb.sym(sel.currentURI));
|
|
1385
|
-
sel = sel.superSelect;
|
|
1386
|
-
}
|
|
1387
|
-
function doneNew(ok, _body) {
|
|
1388
|
-
callbackFunction(ok, {
|
|
1389
|
-
widget: 'select',
|
|
1390
|
-
event: 'new'
|
|
1391
|
-
});
|
|
1392
|
-
}
|
|
1393
|
-
log.info('makeSelectForClassifierOptions: data doc = ' + dataDoc);
|
|
1394
|
-
kb.updater.update(ds, is, function (uri, ok, body) {
|
|
1395
|
-
actual = getActual(); // refresh
|
|
1396
|
-
if (ok) {
|
|
1397
|
-
select.disabled = false; // data written back
|
|
1398
|
-
if (newObject) {
|
|
1399
|
-
var fn = (0, _fieldFunction.fieldFunction)(dom, options.subForm);
|
|
1400
|
-
fn(dom, select.parentNode, {}, newObject, options.subForm, dataDoc, doneNew);
|
|
1401
|
-
}
|
|
1402
|
-
} else {
|
|
1403
|
-
return select.parentNode.appendChild((0, _error.errorMessageBlock)(dom, 'Error updating data in select: ' + body));
|
|
1404
|
-
}
|
|
1405
|
-
if (callbackFunction) callbackFunction(ok, {
|
|
1406
|
-
widget: 'select',
|
|
1407
|
-
event: 'change'
|
|
1408
|
-
});
|
|
1409
|
-
});
|
|
1410
|
-
};
|
|
1411
|
-
var select = dom.createElement('select');
|
|
1412
|
-
select.setAttribute('style', style.formSelectStyle);
|
|
1413
|
-
if (options.multiple) select.setAttribute('multiple', 'true');
|
|
1414
|
-
select.currentURI = null;
|
|
1415
|
-
select.refresh = function () {
|
|
1416
|
-
actual = getActual(); // refresh
|
|
1417
|
-
for (var _i2 = 0; _i2 < select.children.length; _i2++) {
|
|
1418
|
-
var option = select.children[_i2];
|
|
1419
|
-
if (option.AJAR_uri) {
|
|
1420
|
-
option.selected = option.AJAR_uri in actual;
|
|
1421
|
-
}
|
|
1422
|
-
}
|
|
1423
|
-
select.disabled = false; // unlocked any conflict we had got into
|
|
1424
|
-
};
|
|
1425
|
-
for (var uri in uris) {
|
|
1426
|
-
var c = kb.sym(uri);
|
|
1427
|
-
var option = dom.createElement('option');
|
|
1428
|
-
if (options.disambiguate) {
|
|
1429
|
-
option.appendChild(dom.createTextNode(utils.labelWithOntology(c, true))); // Init. cap
|
|
1430
|
-
} else {
|
|
1431
|
-
option.appendChild(dom.createTextNode(utils.label(c, true))); // Init.
|
|
1432
|
-
}
|
|
1433
|
-
var backgroundColor = kb.any(c, kb.sym('http://www.w3.org/ns/ui#backgroundColor'));
|
|
1434
|
-
if (backgroundColor) {
|
|
1435
|
-
option.setAttribute('style', 'background-color: ' + backgroundColor.value + '; ');
|
|
1436
|
-
}
|
|
1437
|
-
option.AJAR_uri = uri;
|
|
1438
|
-
if (uri in actual) {
|
|
1439
|
-
option.setAttribute('selected', 'true');
|
|
1440
|
-
select.currentURI = uri;
|
|
1441
|
-
// dump("Already in class: "+ uri+"\n")
|
|
1442
|
-
}
|
|
1443
|
-
select.appendChild(option);
|
|
1444
|
-
}
|
|
1445
|
-
if (editable && options.mint) {
|
|
1446
|
-
var mint = dom.createElement('option');
|
|
1447
|
-
mint.appendChild(dom.createTextNode(options.mint));
|
|
1448
|
-
mint.AJAR_mint = true; // Flag it
|
|
1449
|
-
select.insertBefore(mint, select.firstChild);
|
|
1450
|
-
}
|
|
1451
|
-
if (select.currentURI == null && !options.multiple) {
|
|
1452
|
-
var prompt = dom.createElement('option');
|
|
1453
|
-
prompt.appendChild(dom.createTextNode(options.nullLabel));
|
|
1454
|
-
select.insertBefore(prompt, select.firstChild);
|
|
1455
|
-
prompt.selected = true;
|
|
1456
|
-
}
|
|
1457
|
-
if (editable) {
|
|
1458
|
-
select.addEventListener('change', onChange, false);
|
|
1459
|
-
}
|
|
1460
|
-
return select;
|
|
1461
|
-
} // makeSelectForClassifierOptions
|
|
1462
|
-
|
|
1463
|
-
/** Make SELECT element to select options
|
|
1464
|
-
//
|
|
1465
|
-
// @param subject - a term, the subject of the statement(s) being edited.
|
|
1466
|
-
// @param predicate - a term, the predicate of the statement(s) being edited
|
|
1467
|
-
// @param possible - a list of terms, the possible value the object can take
|
|
1468
|
-
// @param options.nullLabel - a string to be displayed as the
|
|
1469
|
-
// option for none selected (for non multiple)
|
|
1470
|
-
// @param options.subForm - If mint, then the form to be used for minting the new thing
|
|
1471
|
-
// @param dataDoc - The web document being edited
|
|
1472
|
-
// @param callbackFunction - takes (boolean ok, string errorBody)
|
|
1473
|
-
*/
|
|
1474
|
-
function makeSelectForOptions(dom, kb, subject, predicate, possible, options, dataDoc, callbackFunction) {
|
|
1475
|
-
log.debug('Select list length now ' + possible.length);
|
|
1476
|
-
var n = 0;
|
|
1477
|
-
var uris = {}; // Count them
|
|
1478
|
-
var editable = kb.updater.editable(dataDoc.uri);
|
|
1479
|
-
for (var i = 0; i < possible.length; i++) {
|
|
1480
|
-
var sub = possible[i]; // @@ Maybe; make this so it works with blank nodes too
|
|
1481
|
-
if (!sub.uri) debug.warn("makeSelectForOptions: option does not have an uri: ".concat(sub, ", with predicate: ").concat(predicate));
|
|
1482
|
-
if (!sub.uri || sub.uri in uris) continue;
|
|
1483
|
-
uris[sub.uri] = true;
|
|
1484
|
-
n++;
|
|
1485
|
-
} // uris is now the set of possible options
|
|
1486
|
-
if (n === 0) {
|
|
1487
|
-
return (0, _error.errorMessageBlock)(dom, "Can't do selector with no options, subject= " + subject + ' property = ' + predicate + '.');
|
|
1488
|
-
}
|
|
1489
|
-
log.debug('makeSelectForOptions: dataDoc=' + dataDoc);
|
|
1490
|
-
var actual;
|
|
1491
|
-
var getActual = function getActual() {
|
|
1492
|
-
actual = {};
|
|
1493
|
-
if (predicate.sameTerm(ns.rdf('type'))) {
|
|
1494
|
-
actual = kb.findTypeURIs(subject);
|
|
1495
|
-
} else {
|
|
1496
|
-
kb.each(subject, predicate, null, dataDoc).forEach(function (x) {
|
|
1497
|
-
if (x.uri) {
|
|
1498
|
-
actual[x.uri] = true;
|
|
1499
|
-
}
|
|
1500
|
-
});
|
|
1501
|
-
}
|
|
1502
|
-
return actual;
|
|
1503
|
-
};
|
|
1504
|
-
actual = getActual();
|
|
1505
|
-
var onChange = function onChange(_e) {
|
|
1506
|
-
select.disabled = true; // until data written back - gives user feedback too
|
|
1507
|
-
var ds = [];
|
|
1508
|
-
var is = [];
|
|
1509
|
-
var removeValue = function removeValue(t) {
|
|
1510
|
-
if (kb.holds(subject, predicate, t, dataDoc)) {
|
|
1511
|
-
ds.push($rdf.st(subject, predicate, t, dataDoc));
|
|
1512
|
-
}
|
|
1513
|
-
};
|
|
1514
|
-
for (var _i3 = 0; _i3 < select.options.length; _i3++) {
|
|
1515
|
-
var opt = select.options[_i3];
|
|
1516
|
-
if (!opt.AJAR_uri) continue; // a prompt or mint
|
|
1517
|
-
if (opt.selected && !(opt.AJAR_uri in actual)) {
|
|
1518
|
-
// new class
|
|
1519
|
-
is.push($rdf.st(subject, predicate, kb.sym(opt.AJAR_uri), dataDoc));
|
|
1520
|
-
}
|
|
1521
|
-
if (!opt.selected && opt.AJAR_uri in actual) {
|
|
1522
|
-
// old class
|
|
1523
|
-
removeValue(kb.sym(opt.AJAR_uri));
|
|
1524
|
-
}
|
|
1525
|
-
if (opt.selected) select.currentURI = opt.AJAR_uri;
|
|
1526
|
-
}
|
|
1527
|
-
var sel = select.subSelect; // All subclasses must also go
|
|
1528
|
-
while (sel && sel.currentURI) {
|
|
1529
|
-
removeValue(kb.sym(sel.currentURI));
|
|
1530
|
-
sel = sel.subSelect;
|
|
1531
|
-
}
|
|
1532
|
-
sel = select.superSelect; // All superclasses are redundant
|
|
1533
|
-
while (sel && sel.currentURI) {
|
|
1534
|
-
removeValue(kb.sym(sel.currentURI));
|
|
1535
|
-
sel = sel.superSelect;
|
|
1536
|
-
}
|
|
1537
|
-
log.info('selectForOptions: data doc = ' + dataDoc);
|
|
1538
|
-
kb.updater.update(ds, is, function (uri, ok, body) {
|
|
1539
|
-
actual = getActual(); // refresh
|
|
1540
|
-
if (ok) {
|
|
1541
|
-
select.disabled = false; // data written back
|
|
1542
|
-
} else {
|
|
1543
|
-
return select.parentNode.appendChild((0, _error.errorMessageBlock)(dom, 'Error updating data in select: ' + body));
|
|
1544
|
-
}
|
|
1545
|
-
if (callbackFunction) callbackFunction(ok, {
|
|
1546
|
-
widget: 'select',
|
|
1547
|
-
event: 'change'
|
|
1548
|
-
});
|
|
1549
|
-
});
|
|
1550
|
-
};
|
|
1551
|
-
var select = dom.createElement('select');
|
|
1552
|
-
select.setAttribute('style', style.formSelectStyle);
|
|
1553
|
-
select.currentURI = null;
|
|
1554
|
-
select.refresh = function () {
|
|
1555
|
-
actual = getActual(); // refresh
|
|
1556
|
-
for (var _i4 = 0; _i4 < select.children.length; _i4++) {
|
|
1557
|
-
var option = select.children[_i4];
|
|
1558
|
-
if (option.AJAR_uri) {
|
|
1559
|
-
option.selected = option.AJAR_uri in actual;
|
|
1560
|
-
}
|
|
1561
|
-
}
|
|
1562
|
-
select.disabled = false; // unlocked any conflict we had got into
|
|
1563
|
-
};
|
|
1564
|
-
for (var uri in uris) {
|
|
1565
|
-
var c = kb.sym(uri);
|
|
1566
|
-
var option = dom.createElement('option');
|
|
1567
|
-
if (options.disambiguate) {
|
|
1568
|
-
option.appendChild(dom.createTextNode(utils.labelWithOntology(c, true))); // Init. cap
|
|
1569
|
-
} else {
|
|
1570
|
-
option.appendChild(dom.createTextNode(utils.label(c, true))); // Init.
|
|
1571
|
-
}
|
|
1572
|
-
var backgroundColor = kb.any(c, kb.sym('http://www.w3.org/ns/ui#backgroundColor'));
|
|
1573
|
-
if (backgroundColor) {
|
|
1574
|
-
option.setAttribute('style', 'background-color: ' + backgroundColor.value + '; ');
|
|
1575
|
-
}
|
|
1576
|
-
option.AJAR_uri = uri;
|
|
1577
|
-
if (uri in actual) {
|
|
1578
|
-
option.setAttribute('selected', 'true');
|
|
1579
|
-
select.currentURI = uri;
|
|
1580
|
-
// dump("Already in class: "+ uri+"\n")
|
|
1581
|
-
}
|
|
1582
|
-
select.appendChild(option);
|
|
1583
|
-
}
|
|
1584
|
-
if (!select.currentURI) {
|
|
1585
|
-
var prompt = dom.createElement('option');
|
|
1586
|
-
prompt.appendChild(dom.createTextNode(options.nullLabel));
|
|
1587
|
-
select.insertBefore(prompt, select.firstChild);
|
|
1588
|
-
prompt.selected = true;
|
|
1589
|
-
}
|
|
1590
|
-
if (editable) {
|
|
1591
|
-
select.addEventListener('change', onChange, false);
|
|
1592
|
-
}
|
|
1593
|
-
return select;
|
|
1594
|
-
} // makeSelectForOptions
|
|
1595
|
-
|
|
1596
|
-
// Make SELECT element to select subclasses
|
|
1597
|
-
//
|
|
1598
|
-
// If there is any disjoint union it will so a mutually exclusive dropdown
|
|
1599
|
-
// Failing that it will do a multiple selection of subclasses.
|
|
1600
|
-
// Callback takes (boolean ok, string errorBody)
|
|
1601
|
-
|
|
1602
|
-
function makeSelectForCategory(dom, kb, subject, category, dataDoc, callbackFunction) {
|
|
1603
|
-
var du = kb.any(category, ns.owl('disjointUnionOf'));
|
|
1604
|
-
var subs;
|
|
1605
|
-
var multiple = false;
|
|
1606
|
-
if (!du) {
|
|
1607
|
-
subs = kb.each(undefined, ns.rdfs('subClassOf'), category);
|
|
1608
|
-
multiple = true;
|
|
1609
|
-
} else {
|
|
1610
|
-
subs = du.elements;
|
|
1611
|
-
}
|
|
1612
|
-
log.debug('Select list length ' + subs.length);
|
|
1613
|
-
if (subs.length === 0) {
|
|
1614
|
-
return (0, _error.errorMessageBlock)(dom, "Can't do " + (multiple ? 'multiple ' : '') + 'selector with no subclasses of category: ' + category);
|
|
1615
|
-
}
|
|
1616
|
-
if (subs.length === 1) {
|
|
1617
|
-
return (0, _error.errorMessageBlock)(dom, "Can't do " + (multiple ? 'multiple ' : '') + 'selector with only 1 subclass of category: ' + category + ':' + subs[1]);
|
|
1618
|
-
}
|
|
1619
|
-
return makeSelectForClassifierOptions(dom, kb, subject, ns.rdf('type'), subs, {
|
|
1620
|
-
multiple: multiple,
|
|
1621
|
-
nullLabel: '* Select type *'
|
|
1622
|
-
}, dataDoc, callbackFunction);
|
|
1623
|
-
}
|
|
1624
|
-
|
|
1625
|
-
/** Make SELECT element to select subclasses recurively
|
|
1626
|
-
//
|
|
1627
|
-
// It will so a mutually exclusive dropdown, with another if there are nested
|
|
1628
|
-
// disjoint unions.
|
|
1629
|
-
//
|
|
1630
|
-
// @param callbackFunction takes (boolean ok, string errorBody)
|
|
1631
|
-
*/
|
|
1632
|
-
function makeSelectForNestedCategory(dom, kb, subject, category, dataDoc, callbackFunction) {
|
|
1633
|
-
function update() {
|
|
1634
|
-
if (child) {
|
|
1635
|
-
container.removeChild(child);
|
|
1636
|
-
child = null;
|
|
1637
|
-
}
|
|
1638
|
-
if (select.currentURI && kb.any(kb.sym(select.currentURI), ns.owl('disjointUnionOf'))) {
|
|
1639
|
-
child = makeSelectForNestedCategory(dom, kb, subject, kb.sym(select.currentURI), dataDoc, callbackFunction);
|
|
1640
|
-
select.subSelect = child.firstChild;
|
|
1641
|
-
select.subSelect.superSelect = select;
|
|
1642
|
-
container.appendChild(child);
|
|
1643
|
-
}
|
|
1644
|
-
}
|
|
1645
|
-
var container = dom.createElement('span'); // Container
|
|
1646
|
-
var child = null;
|
|
1647
|
-
function onChange(ok, body) {
|
|
1648
|
-
if (ok) update();
|
|
1649
|
-
callbackFunction(ok, body);
|
|
1650
|
-
}
|
|
1651
|
-
var select = makeSelectForCategory(dom, kb, subject, category, dataDoc, onChange);
|
|
1652
|
-
container.appendChild(select);
|
|
1653
|
-
update();
|
|
1654
|
-
return container;
|
|
1655
|
-
}
|
|
1656
|
-
|
|
1657
|
-
/* Build a checkbox from a given statement(s)
|
|
1658
|
-
**
|
|
1659
|
-
** If the source document is editable, make the checkbox editable
|
|
1660
|
-
**
|
|
1661
|
-
** ins and sel are either statements *or arrays of statements* which should be
|
|
1662
|
-
** made if the checkbox is checed and unchecked respectively.
|
|
1663
|
-
** tristate: Allow ins, or del, or neither
|
|
1664
|
-
*/
|
|
1665
|
-
function buildCheckboxForm(dom, kb, lab, del, ins, form, dataDoc, tristate) {
|
|
1666
|
-
var box = dom.createElement('div');
|
|
1667
|
-
var rhs = (0, _basic.renderNameValuePair)(dom, kb, box, form, lab);
|
|
1668
|
-
var editable = kb.updater.editable(dataDoc.uri);
|
|
1669
|
-
var input = dom.createElement('button');
|
|
1670
|
-
var colorCarrier = input;
|
|
1671
|
-
input.style = style.checkboxInputStyle;
|
|
1672
|
-
rhs.appendChild(input);
|
|
1673
|
-
function fix(x) {
|
|
1674
|
-
if (!x) return []; // no statements
|
|
1675
|
-
if (x.object) {
|
|
1676
|
-
if (!x.why) {
|
|
1677
|
-
x.why = dataDoc; // be back-compaitible with old code
|
|
1678
|
-
}
|
|
1679
|
-
return [x]; // one statements
|
|
1680
|
-
}
|
|
1681
|
-
if (x instanceof Array) return x;
|
|
1682
|
-
throw new Error('buildCheckboxForm: bad param ' + x);
|
|
1683
|
-
}
|
|
1684
|
-
ins = fix(ins);
|
|
1685
|
-
del = fix(del);
|
|
1686
|
-
function holdsAll(a) {
|
|
1687
|
-
var missing = a.filter(function (st) {
|
|
1688
|
-
return !kb.holds(st.subject, st.predicate, st.object, st.why);
|
|
1689
|
-
});
|
|
1690
|
-
return missing.length === 0;
|
|
1691
|
-
}
|
|
1692
|
-
function refresh() {
|
|
1693
|
-
var state = holdsAll(ins);
|
|
1694
|
-
var displayState = state;
|
|
1695
|
-
if (del.length) {
|
|
1696
|
-
var negation = holdsAll(del);
|
|
1697
|
-
if (state && negation) {
|
|
1698
|
-
box.appendChild(widgets.errorMessageBlock(dom, 'Inconsistent data in dataDoc!\n' + ins + ' and\n' + del));
|
|
1699
|
-
return box;
|
|
1700
|
-
}
|
|
1701
|
-
if (!state && !negation) {
|
|
1702
|
-
state = null;
|
|
1703
|
-
var defa = kb.any(form, ns.ui('default'));
|
|
1704
|
-
displayState = defa ? defa.value === '1' : tristate ? null : false;
|
|
1705
|
-
}
|
|
1706
|
-
}
|
|
1707
|
-
input.state = state;
|
|
1708
|
-
input.textContent = {
|
|
1709
|
-
"true": checkMarkCharacter,
|
|
1710
|
-
"false": tristate ? cancelCharacter : ' ',
|
|
1711
|
-
// Just use blank when not tristate
|
|
1712
|
-
"null": dashCharacter
|
|
1713
|
-
}[displayState];
|
|
1714
|
-
}
|
|
1715
|
-
refresh();
|
|
1716
|
-
if (!editable) return box;
|
|
1717
|
-
var boxHandler = function boxHandler(_e) {
|
|
1718
|
-
colorCarrier.style.color = '#bbb'; // grey -- not saved yet
|
|
1719
|
-
var toDelete = input.state === true ? ins : input.state === false ? del : [];
|
|
1720
|
-
input.newState = input.state === null ? true : input.state === true ? false : tristate ? null : true;
|
|
1721
|
-
var toInsert = input.newState === true ? ins : input.newState === false ? del : [];
|
|
1722
|
-
debug.log(" Deleting ".concat(toDelete));
|
|
1723
|
-
debug.log(" Inserting ".concat(toInsert));
|
|
1724
|
-
kb.updater.update(toDelete, toInsert, function (uri, success, errorBody) {
|
|
1725
|
-
if (!success) {
|
|
1726
|
-
if (toDelete.why) {
|
|
1727
|
-
var hmmm = kb.holds(toDelete.subject, toDelete.predicate, toDelete.object, toDelete.why);
|
|
1728
|
-
if (hmmm) {
|
|
1729
|
-
debug.log(' @@@@@ weird if 409 - does hold statement');
|
|
1730
|
-
}
|
|
1731
|
-
}
|
|
1732
|
-
colorCarrier.style.color = '#000';
|
|
1733
|
-
colorCarrier.style.backgroundColor = '#fee';
|
|
1734
|
-
box.appendChild((0, _error.errorMessageBlock)(dom, "Checkbox: Error updating dataDoc from ".concat(input.state, " to ").concat(input.newState, ":\n\n").concat(errorBody)));
|
|
1735
|
-
} else {
|
|
1736
|
-
colorCarrier.style.color = '#000';
|
|
1737
|
-
input.state = input.newState;
|
|
1738
|
-
input.textContent = {
|
|
1739
|
-
"true": checkMarkCharacter,
|
|
1740
|
-
"false": cancelCharacter,
|
|
1741
|
-
"null": dashCharacter
|
|
1742
|
-
}[input.state]; // @@
|
|
1743
|
-
}
|
|
1744
|
-
});
|
|
1745
|
-
};
|
|
1746
|
-
input.addEventListener('click', boxHandler, false);
|
|
1747
|
-
return box;
|
|
1748
|
-
}
|
|
1749
|
-
/*
|
|
1750
|
-
export function fieldLabel (dom, property, form) {
|
|
1751
|
-
let lab = kb.any(form, ns.ui('label'))
|
|
1752
|
-
if (!lab) lab = utils.label(property, true) // Init capital
|
|
1753
|
-
if (property === undefined) {
|
|
1754
|
-
return dom.createTextNode('@@Internal error: undefined property')
|
|
1755
|
-
}
|
|
1756
|
-
const anchor = dom.createElement('a')
|
|
1757
|
-
if (property.uri) anchor.setAttribute('href', property.uri)
|
|
1758
|
-
anchor.setAttribute('style', style.fieldLabelStyle) // Not too blue and no underline
|
|
1759
|
-
anchor.textContent = lab
|
|
1760
|
-
return anchor
|
|
1761
|
-
}
|
|
1762
|
-
|
|
1763
|
-
export function fieldStore (subject, predicate, def) {
|
|
1764
|
-
const sts = kb.statementsMatching(subject, predicate)
|
|
1765
|
-
if (sts.length === 0) return def // can used default as no data yet
|
|
1766
|
-
if (
|
|
1767
|
-
sts.length > 0 &&
|
|
1768
|
-
sts[0].why.uri &&
|
|
1769
|
-
kb.updater.editable(sts[0].why.uri)
|
|
1770
|
-
) {
|
|
1771
|
-
return kb.sym(sts[0].why.uri)
|
|
1772
|
-
}
|
|
1773
|
-
return def
|
|
1774
|
-
}
|
|
1775
|
-
*/
|
|
1776
|
-
/** Mint local ID using timestamp
|
|
1777
|
-
* @param {NamedNode} doc - the document in which the ID is to be generated
|
|
1778
|
-
*/
|
|
1779
|
-
function newThing(doc) {
|
|
1780
|
-
var now = new Date();
|
|
1781
|
-
return $rdf.sym(doc.uri + '#' + 'id' + ('' + now.getTime()));
|
|
1782
|
-
}
|
|
1783
|
-
|
|
1784
|
-
/** Make SELECT element to select options
|
|
1785
|
-
//
|
|
1786
|
-
// @param subject - a term, the subject of the statement(s) being edited.
|
|
1787
|
-
// @param predicate - a term, the predicate of the statement(s) being edited
|
|
1788
|
-
// @param possible - a list of terms, the possible value the object can take
|
|
1789
|
-
// @param options.mint - User may create thing if this sent to the prompt string eg "New foo"
|
|
1790
|
-
// @param options.subForm - If mint, then the form to be used for minting the new thing
|
|
1791
|
-
// @param dataDoc - The web document being edited
|
|
1792
|
-
// @param callbackFunction - takes (boolean ok, string errorBody)
|
|
1793
|
-
*/
|
|
1794
|
-
function makeSelectForChoice(dom, container, kb, subject, predicate, inputPossibleOptions, selectedOptions, uiFrom, options, dataDoc, callbackFunction) {
|
|
1795
|
-
var optionsFromClassUIfrom = {}; // Count them
|
|
1796
|
-
var editable = kb.updater.editable(dataDoc.uri);
|
|
1797
|
-
for (var i = 0; i < inputPossibleOptions.length; i++) {
|
|
1798
|
-
var sub = inputPossibleOptions[i]; // @@ Maybe; make this so it works with blank nodes too
|
|
1799
|
-
// if (!sub.uri) debug.warn(`makeSelectForChoice: option does not have an uri: ${sub}, with predicate: ${predicate}`)
|
|
1800
|
-
if (!sub.uri || sub.uri in optionsFromClassUIfrom) continue;
|
|
1801
|
-
optionsFromClassUIfrom[sub.uri] = true;
|
|
1802
|
-
}
|
|
1803
|
-
var isEmpty = Object.keys(optionsFromClassUIfrom).length === 0;
|
|
1804
|
-
if (isEmpty && !options.mint) {
|
|
1805
|
-
return (0, _error.errorMessageBlock)(dom, "Can't do selector with no options, subject= " + subject + ' property = ' + predicate + '.');
|
|
1806
|
-
}
|
|
1807
|
-
log.debug('makeSelectForChoice: dataDoc=' + dataDoc);
|
|
1808
|
-
function createDefaultSelectOptionText() {
|
|
1809
|
-
var firstSelectOptionText = '--- choice ---';
|
|
1810
|
-
if (predicate && !(predicate.termType === 'BlankNode')) {
|
|
1811
|
-
firstSelectOptionText = '* Select for property: ' + utils.label(predicate) + ' *';
|
|
1812
|
-
}
|
|
1813
|
-
if (subject && !(subject.termType === 'BlankNode')) {
|
|
1814
|
-
firstSelectOptionText = '* Select for ' + utils.label(subject, true) + ' *';
|
|
1815
|
-
}
|
|
1816
|
-
return firstSelectOptionText;
|
|
1817
|
-
}
|
|
1818
|
-
function createDefaultSelectOption() {
|
|
1819
|
-
var option = dom.createElement('option');
|
|
1820
|
-
option.appendChild(dom.createTextNode(createDefaultSelectOptionText()));
|
|
1821
|
-
option.disabled = true;
|
|
1822
|
-
option.value = true;
|
|
1823
|
-
option.hidden = true;
|
|
1824
|
-
option.selected = true;
|
|
1825
|
-
return option;
|
|
1826
|
-
}
|
|
1827
|
-
var onChange = function onChange(_e) {
|
|
1828
|
-
container.removeChild(container.lastChild);
|
|
1829
|
-
select.refresh();
|
|
1830
|
-
};
|
|
1831
|
-
var select = dom.createElement('select');
|
|
1832
|
-
select.setAttribute('style', style.formSelectStyle);
|
|
1833
|
-
select.setAttribute('id', 'formSelect');
|
|
1834
|
-
select.currentURI = null;
|
|
1835
|
-
for (var uri in optionsFromClassUIfrom) {
|
|
1836
|
-
select.appendChild(createOption(uri));
|
|
1837
|
-
}
|
|
1838
|
-
if (editable && options.mint) {
|
|
1839
|
-
var mint = dom.createElement('option');
|
|
1840
|
-
mint.appendChild(dom.createTextNode(options.mint));
|
|
1841
|
-
mint.AJAR_mint = true; // Flag it
|
|
1842
|
-
select.insertBefore(mint, select.firstChild);
|
|
1843
|
-
}
|
|
1844
|
-
if (select.children.length === 0) select.insertBefore(createDefaultSelectOption(), select.firstChild);
|
|
1845
|
-
select.update = function (newSelectedOptions) {
|
|
1846
|
-
selectedOptions = newSelectedOptions;
|
|
1847
|
-
var ds = [];
|
|
1848
|
-
var is = [];
|
|
1849
|
-
var removeValue = function removeValue(t) {
|
|
1850
|
-
if (kb.holds(subject, predicate, t, dataDoc)) {
|
|
1851
|
-
ds.push($rdf.st(subject, predicate, t, dataDoc));
|
|
1852
|
-
}
|
|
1853
|
-
};
|
|
1854
|
-
var addValue = function addValue(t) {
|
|
1855
|
-
if (!kb.holds(subject, predicate, t, dataDoc)) {
|
|
1856
|
-
is.push($rdf.st(subject, predicate, t, dataDoc));
|
|
1857
|
-
// console.log("----value added " + t)
|
|
1858
|
-
}
|
|
1859
|
-
if (uiFrom && !kb.holds(t, ns.rdf('type'), kb.sym(uiFrom), dataDoc)) {
|
|
1860
|
-
is.push($rdf.st(t, ns.rdf('type'), kb.sym(uiFrom), dataDoc));
|
|
1861
|
-
// console.log("----added type to value " + uiFrom)
|
|
1862
|
-
}
|
|
1863
|
-
};
|
|
1864
|
-
var existingValues = kb.each(subject, predicate, null, dataDoc).map(function (object) {
|
|
1865
|
-
return object.value;
|
|
1866
|
-
});
|
|
1867
|
-
var _iterator2 = _createForOfIteratorHelper(existingValues),
|
|
1868
|
-
_step2;
|
|
1869
|
-
try {
|
|
1870
|
-
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
1871
|
-
var value = _step2.value;
|
|
1872
|
-
if (!containsObject(value, selectedOptions)) removeValue($rdf.sym(value));
|
|
1873
|
-
}
|
|
1874
|
-
} catch (err) {
|
|
1875
|
-
_iterator2.e(err);
|
|
1876
|
-
} finally {
|
|
1877
|
-
_iterator2.f();
|
|
1878
|
-
}
|
|
1879
|
-
var _iterator3 = _createForOfIteratorHelper(selectedOptions),
|
|
1880
|
-
_step3;
|
|
1881
|
-
try {
|
|
1882
|
-
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
|
1883
|
-
var _value = _step3.value;
|
|
1884
|
-
if (!(_value in existingValues)) addValue($rdf.sym(_value));
|
|
1885
|
-
}
|
|
1886
|
-
} catch (err) {
|
|
1887
|
-
_iterator3.e(err);
|
|
1888
|
-
} finally {
|
|
1889
|
-
_iterator3.f();
|
|
1890
|
-
}
|
|
1891
|
-
kb.updater.update(ds, is, function (uri, ok, body) {
|
|
1892
|
-
if (!ok) return select.parentNode.appendChild((0, _error.errorMessageBlock)(dom, 'Error updating data in select: ' + body));
|
|
1893
|
-
select.refresh();
|
|
1894
|
-
if (callbackFunction) callbackFunction(ok, {
|
|
1895
|
-
widget: 'select',
|
|
1896
|
-
event: 'change'
|
|
1897
|
-
});
|
|
1898
|
-
});
|
|
1899
|
-
};
|
|
1900
|
-
select.refresh = function () {
|
|
1901
|
-
select.disabled = true; // unlocked any conflict we had got into
|
|
1902
|
-
var is = [];
|
|
1903
|
-
var newObject;
|
|
1904
|
-
for (var _i5 = 0; _i5 < select.options.length; _i5++) {
|
|
1905
|
-
var opt = select.options[_i5];
|
|
1906
|
-
if (opt.selected && opt.AJAR_mint) {
|
|
1907
|
-
// not sure if this 'if' is used because I cannot find mintClass
|
|
1908
|
-
if (options.mintClass) {
|
|
1909
|
-
var thisForm = promptForNew(dom, kb, subject, predicate, uiFrom, options.subForm, dataDoc, function (ok, body) {
|
|
1910
|
-
if (!ok) {
|
|
1911
|
-
callbackFunction(ok, body, {
|
|
1912
|
-
change: 'new'
|
|
1913
|
-
}); // @@ if ok, need some form of refresh of the select for the new thing
|
|
1914
|
-
}
|
|
1915
|
-
});
|
|
1916
|
-
select.parentNode.appendChild(thisForm);
|
|
1917
|
-
newObject = thisForm.AJAR_subject;
|
|
1918
|
-
} else {
|
|
1919
|
-
newObject = newThing(dataDoc);
|
|
1920
|
-
}
|
|
1921
|
-
is.push($rdf.st(subject, predicate, kb.sym(newObject), dataDoc));
|
|
1922
|
-
if (uiFrom) is.push($rdf.st(newObject, ns.rdf('type'), kb.sym(uiFrom), dataDoc));
|
|
1923
|
-
|
|
1924
|
-
// not sure if this 'if' is used because I cannot find mintStatementsFun
|
|
1925
|
-
if (options.mintStatementsFun) {
|
|
1926
|
-
is = is.concat(options.mintStatementsFun(newObject));
|
|
1927
|
-
}
|
|
1928
|
-
select.currentURI = newObject;
|
|
1929
|
-
}
|
|
1930
|
-
if (!opt.AJAR_uri) continue; // a prompt or mint
|
|
1931
|
-
if (opt.selected && containsObject(opt.AJAR_uri, selectedOptions)) {
|
|
1932
|
-
select.currentURI = opt.AJAR_uri;
|
|
1933
|
-
}
|
|
1934
|
-
if (!containsObject(opt.AJAR_uri, selectedOptions)) opt.removeAttribute('selected');
|
|
1935
|
-
if (containsObject(opt.AJAR_uri, selectedOptions)) opt.setAttribute('selected', 'true');
|
|
1936
|
-
}
|
|
1937
|
-
log.info('selectForOptions: data doc = ' + dataDoc);
|
|
1938
|
-
if (select.currentURI && options.subForm && !options.multiSelect) {
|
|
1939
|
-
addSubFormChoice(dom, container, {}, $rdf.sym(select.currentURI), options.subForm, dataDoc, function (ok, body) {
|
|
1940
|
-
if (ok) {
|
|
1941
|
-
kb.updater.update([], is, function (uri, success, errorBody) {
|
|
1942
|
-
if (!success) container.appendChild((0, _error.errorMessageBlock)(dom, 'Error updating select: ' + errorBody));
|
|
1943
|
-
});
|
|
1944
|
-
if (callbackFunction) callbackFunction(ok, {
|
|
1945
|
-
widget: 'select',
|
|
1946
|
-
event: 'new'
|
|
1947
|
-
});
|
|
1948
|
-
} else {
|
|
1949
|
-
container.appendChild((0, _error.errorMessageBlock)(dom, 'Error updating data in field of select: ' + body));
|
|
1950
|
-
}
|
|
1951
|
-
});
|
|
1952
|
-
}
|
|
1953
|
-
select.disabled = false;
|
|
1954
|
-
};
|
|
1955
|
-
function createOption(uri) {
|
|
1956
|
-
var option = dom.createElement('option');
|
|
1957
|
-
var c = kb.sym(uri);
|
|
1958
|
-
var label;
|
|
1959
|
-
if (options.disambiguate) {
|
|
1960
|
-
label = utils.labelWithOntology(c, true); // Init. cap
|
|
1961
|
-
} else {
|
|
1962
|
-
label = utils.label(c, true);
|
|
1963
|
-
}
|
|
1964
|
-
option.appendChild(dom.createTextNode(label)); // Init.
|
|
1965
|
-
option.setAttribute('value', uri);
|
|
1966
|
-
var backgroundColor = kb.any(c, kb.sym('http://www.w3.org/ns/ui#backgroundColor'));
|
|
1967
|
-
if (backgroundColor) {
|
|
1968
|
-
option.setAttribute('style', 'background-color: ' + backgroundColor.value + '; ');
|
|
1969
|
-
}
|
|
1970
|
-
option.AJAR_uri = uri;
|
|
1971
|
-
if (containsObject(c.value, selectedOptions)) {
|
|
1972
|
-
option.setAttribute('selected', 'true');
|
|
1973
|
-
}
|
|
1974
|
-
return option;
|
|
1975
|
-
}
|
|
1976
|
-
if (editable) {
|
|
1977
|
-
select.addEventListener('change', onChange, false);
|
|
1978
|
-
}
|
|
1979
|
-
return select;
|
|
1980
|
-
} // makeSelectForChoice
|
|
1981
|
-
|
|
1982
|
-
function containsObject(obj, list) {
|
|
1983
|
-
var i;
|
|
1984
|
-
for (i = 0; i < list.length; i++) {
|
|
1985
|
-
if (list[i] === obj) {
|
|
1986
|
-
return true;
|
|
1987
|
-
}
|
|
1988
|
-
}
|
|
1989
|
-
return false;
|
|
1990
|
-
}
|
|
1991
|
-
|
|
1992
|
-
// This functions replaces the findMembersNT (thisClass) from rdflib until we fix: https://github.com/linkeddata/rdflib.js/issues/565
|
|
1993
|
-
/**
|
|
1994
|
-
* For anything which has thisClass (or any subclass) as its type,
|
|
1995
|
-
* or is the object of something which has thisClass (or any subclass) as its range,
|
|
1996
|
-
* or subject of something which has thisClass (or any subclass) as its domain
|
|
1997
|
-
* We don't bother doing subproperty (yet?) as it doesn't seem to be used
|
|
1998
|
-
* much.
|
|
1999
|
-
* Get all the Classes of which we can RDFS-infer the subject is a member
|
|
2000
|
-
* @return a hash of URIs
|
|
2001
|
-
*/
|
|
2002
|
-
function findMembersNT(store, thisClass, quad) {
|
|
2003
|
-
var len2;
|
|
2004
|
-
var len4;
|
|
2005
|
-
var m;
|
|
2006
|
-
var pred;
|
|
2007
|
-
var ref1;
|
|
2008
|
-
var ref2;
|
|
2009
|
-
var ref3;
|
|
2010
|
-
var ref4;
|
|
2011
|
-
var ref5;
|
|
2012
|
-
var st;
|
|
2013
|
-
var u;
|
|
2014
|
-
var seeds = {};
|
|
2015
|
-
seeds[thisClass.toNT()] = true;
|
|
2016
|
-
var members = {};
|
|
2017
|
-
var ref = store.transitiveClosure(seeds, store.rdfFactory.namedNode('http://www.w3.org/2000/01/rdf-schema#subClassOf'), true);
|
|
2018
|
-
for (var t in ref) {
|
|
2019
|
-
ref1 = store.statementsMatching(null, store.rdfFactory.namedNode('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), store.fromNT(t), quad);
|
|
2020
|
-
for (var i = 0, len = ref1.length; i < len; i++) {
|
|
2021
|
-
st = ref1[i];
|
|
2022
|
-
members[st.subject.toNT()] = st;
|
|
2023
|
-
}
|
|
2024
|
-
ref2 = store.each(null, store.rdfFactory.namedNode('http://www.w3.org/2000/01/rdf-schema#domain'), store.fromNT(t), quad);
|
|
2025
|
-
for (var l = 0, len1 = ref2.length; l < len1; l++) {
|
|
2026
|
-
pred = ref2[l];
|
|
2027
|
-
ref3 = store.statementsMatching(null, pred, null, quad);
|
|
2028
|
-
for (m = 0, len2 = ref3.length; m < len2; m++) {
|
|
2029
|
-
st = ref3[m];
|
|
2030
|
-
members[st.subject.toNT()] = st;
|
|
2031
|
-
}
|
|
2032
|
-
}
|
|
2033
|
-
ref4 = store.each(null, store.rdfFactory.namedNode('http://www.w3.org/2000/01/rdf-schema#range'), store.fromNT(t), quad);
|
|
2034
|
-
for (var q = 0, len3 = ref4.length; q < len3; q++) {
|
|
2035
|
-
pred = ref4[q];
|
|
2036
|
-
ref5 = store.statementsMatching(null, pred, null, quad);
|
|
2037
|
-
for (u = 0, len4 = ref5.length; u < len4; u++) {
|
|
2038
|
-
st = ref5[u];
|
|
2039
|
-
members[st.object.toNT()] = st;
|
|
2040
|
-
}
|
|
2041
|
-
}
|
|
2042
|
-
}
|
|
2043
|
-
return members;
|
|
2044
|
-
}
|
|
2045
|
-
//# sourceMappingURL=forms.js.map
|