solid-ui 2.4.22-fd0ccabe → 2.4.23
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 +0 -0
- package/README.md +0 -0
- package/dist/index.html +0 -0
- package/dist/main.js +8141 -7208
- package/dist/main.js.map +1 -1
- package/lib/acl/access-controller.d.ts +0 -0
- package/lib/acl/access-controller.d.ts.map +0 -0
- package/lib/acl/access-controller.js +0 -0
- package/lib/acl/access-controller.js.map +1 -1
- package/lib/acl/access-groups.d.ts +0 -0
- package/lib/acl/access-groups.d.ts.map +0 -0
- package/lib/acl/access-groups.js +0 -0
- package/lib/acl/access-groups.js.map +1 -1
- package/lib/acl/acl-control.d.ts +0 -0
- package/lib/acl/acl-control.d.ts.map +0 -0
- package/lib/acl/acl-control.js +0 -0
- package/lib/acl/acl-control.js.map +1 -1
- package/lib/acl/acl.d.ts +0 -0
- package/lib/acl/acl.d.ts.map +0 -0
- package/lib/acl/acl.js +0 -0
- package/lib/acl/acl.js.map +1 -1
- package/lib/acl/add-agent-buttons.d.ts +0 -0
- package/lib/acl/add-agent-buttons.d.ts.map +0 -0
- package/lib/acl/add-agent-buttons.js +0 -1
- package/lib/acl/add-agent-buttons.js.map +1 -1
- package/lib/acl/index.d.ts +0 -0
- package/lib/acl/index.d.ts.map +0 -0
- package/lib/acl/index.js +0 -0
- package/lib/acl/index.js.map +1 -1
- package/lib/acl/styles.d.ts +0 -0
- package/lib/acl/styles.d.ts.map +0 -0
- package/lib/acl/styles.js +0 -0
- package/lib/acl/styles.js.map +1 -1
- package/lib/acl/types.d.ts +0 -0
- package/lib/acl/types.d.ts.map +0 -0
- package/lib/acl/types.js +0 -0
- package/lib/acl/types.js.map +1 -1
- package/lib/chat/bookmarks.js +2 -4
- package/lib/chat/bookmarks.js.map +1 -1
- package/lib/chat/chatLogic.js +0 -0
- package/lib/chat/chatLogic.js.map +1 -1
- package/lib/chat/dateFolder.js +0 -0
- package/lib/chat/dateFolder.js.map +1 -1
- package/lib/chat/infinite.js +0 -0
- package/lib/chat/infinite.js.map +1 -1
- package/lib/chat/message.js +0 -0
- package/lib/chat/message.js.map +1 -1
- package/lib/chat/messageTools.js +0 -0
- package/lib/chat/messageTools.js.map +1 -1
- package/lib/chat/thread.js +0 -0
- package/lib/chat/thread.js.map +1 -1
- package/lib/create/create.d.ts +0 -0
- package/lib/create/create.d.ts.map +0 -0
- package/lib/create/create.js +0 -0
- package/lib/create/create.js.map +1 -1
- package/lib/create/index.d.ts +0 -0
- package/lib/create/index.d.ts.map +0 -0
- package/lib/create/index.js +0 -0
- package/lib/create/index.js.map +1 -1
- package/lib/create/types.d.ts +0 -0
- package/lib/create/types.d.ts.map +0 -0
- package/lib/create/types.js +0 -0
- package/lib/create/types.js.map +1 -1
- package/lib/debug.d.ts +0 -0
- package/lib/debug.d.ts.map +0 -0
- package/lib/debug.js +0 -0
- package/lib/debug.js.map +1 -1
- package/lib/folders.js +0 -0
- package/lib/folders.js.map +1 -1
- package/lib/footer/index.d.ts +0 -0
- package/lib/footer/index.d.ts.map +0 -0
- package/lib/footer/index.js +0 -0
- package/lib/footer/index.js.map +1 -1
- package/lib/footer/styleMap.d.ts +0 -0
- package/lib/footer/styleMap.d.ts.map +0 -0
- package/lib/footer/styleMap.js +0 -0
- package/lib/footer/styleMap.js.map +1 -1
- package/lib/header/empty-profile.d.ts +0 -0
- package/lib/header/empty-profile.d.ts.map +0 -0
- package/lib/header/empty-profile.js +0 -0
- package/lib/header/empty-profile.js.map +1 -1
- package/lib/header/index.d.ts +0 -0
- package/lib/header/index.d.ts.map +0 -0
- package/lib/header/index.js +0 -0
- package/lib/header/index.js.map +1 -1
- package/lib/header/styleMap.d.ts +0 -0
- package/lib/header/styleMap.d.ts.map +0 -0
- package/lib/header/styleMap.js +0 -0
- package/lib/header/styleMap.js.map +1 -1
- package/lib/iconBase.d.ts +0 -0
- package/lib/iconBase.d.ts.map +0 -0
- package/lib/iconBase.js +3 -2
- package/lib/iconBase.js.map +1 -1
- package/lib/icons/solid_logo.d.ts +0 -0
- package/lib/icons/solid_logo.d.ts.map +0 -0
- package/lib/icons/solid_logo.js +0 -0
- package/lib/icons/solid_logo.js.map +1 -1
- package/lib/index.d.ts +0 -0
- package/lib/index.d.ts.map +0 -0
- package/lib/index.js +0 -0
- package/lib/index.js.map +1 -1
- package/lib/jss/index.d.ts +0 -0
- package/lib/jss/index.d.ts.map +0 -0
- package/lib/jss/index.js +0 -0
- package/lib/jss/index.js.map +1 -1
- package/lib/log.d.ts +0 -0
- package/lib/log.d.ts.map +0 -0
- package/lib/log.js +0 -0
- package/lib/log.js.map +1 -1
- package/lib/login/login.d.ts +9 -8
- package/lib/login/login.d.ts.map +1 -1
- package/lib/login/login.js +298 -344
- package/lib/login/login.js.map +1 -1
- package/lib/matrix/index.d.ts +0 -0
- package/lib/matrix/index.d.ts.map +0 -0
- package/lib/matrix/index.js +0 -0
- package/lib/matrix/index.js.map +1 -1
- package/lib/matrix/matrix.d.ts +0 -0
- package/lib/matrix/matrix.d.ts.map +0 -0
- package/lib/matrix/matrix.js +0 -0
- package/lib/matrix/matrix.js.map +1 -1
- package/lib/matrix/types.d.ts +0 -0
- package/lib/matrix/types.d.ts.map +0 -0
- package/lib/matrix/types.js +0 -0
- package/lib/matrix/types.js.map +1 -1
- package/lib/media/index.d.ts +0 -0
- package/lib/media/index.d.ts.map +0 -0
- package/lib/media/index.js +0 -0
- package/lib/media/index.js.map +1 -1
- package/lib/media/media-capture.d.ts +0 -0
- package/lib/media/media-capture.d.ts.map +0 -0
- package/lib/media/media-capture.js +0 -0
- package/lib/media/media-capture.js.map +1 -1
- package/lib/messageArea.js +0 -0
- package/lib/messageArea.js.map +1 -1
- package/lib/noun_Camera_1618446_000000.js +0 -0
- package/lib/noun_Camera_1618446_000000.js.map +1 -1
- package/lib/ns.js +0 -0
- package/lib/ns.js.map +1 -1
- package/lib/pad.d.ts +0 -0
- package/lib/pad.d.ts.map +0 -0
- package/lib/pad.js +0 -0
- package/lib/pad.js.map +1 -1
- package/lib/participation.d.ts +0 -0
- package/lib/participation.d.ts.map +0 -0
- package/lib/participation.js +0 -0
- package/lib/participation.js.map +1 -1
- package/lib/preferences.js +0 -0
- package/lib/preferences.js.map +1 -1
- package/lib/signup/config-default.js +0 -0
- package/lib/signup/config-default.js.map +1 -1
- package/lib/signup/signup.js +0 -0
- package/lib/signup/signup.js.map +1 -1
- package/lib/stories/decorators.js +0 -0
- package/lib/stories/decorators.js.map +1 -1
- package/lib/style.js +0 -0
- package/lib/style.js.map +1 -1
- package/lib/style_multiSelect.js +67 -0
- package/lib/style_multiSelect.js.map +1 -0
- package/lib/table.js +0 -0
- package/lib/table.js.map +1 -1
- package/lib/tabs.d.ts +1 -1
- package/lib/tabs.d.ts.map +1 -1
- package/lib/tabs.js +38 -22
- package/lib/tabs.js.map +1 -1
- package/lib/typings.d.js +0 -0
- package/lib/typings.d.js.map +1 -1
- package/lib/utils/headerFooterHelpers.d.ts +0 -0
- package/lib/utils/headerFooterHelpers.d.ts.map +0 -0
- package/lib/utils/headerFooterHelpers.js +0 -0
- package/lib/utils/headerFooterHelpers.js.map +1 -1
- package/lib/utils/index.js +0 -0
- package/lib/utils/index.js.map +1 -1
- package/lib/utils/label.d.ts +0 -0
- package/lib/utils/label.d.ts.map +0 -0
- package/lib/utils/label.js +1 -1
- package/lib/utils/label.js.map +1 -1
- package/lib/versionInfo.d.ts +9 -9
- package/lib/versionInfo.d.ts.map +0 -0
- package/lib/versionInfo.js +15 -15
- package/lib/versionInfo.js.map +1 -1
- package/lib/widgets/buttons/iconLinks.d.ts +0 -0
- package/lib/widgets/buttons/iconLinks.d.ts.map +0 -0
- package/lib/widgets/buttons/iconLinks.js +0 -0
- package/lib/widgets/buttons/iconLinks.js.map +1 -1
- package/lib/widgets/buttons.d.ts +0 -0
- package/lib/widgets/buttons.d.ts.map +0 -0
- package/lib/widgets/buttons.js +0 -0
- package/lib/widgets/buttons.js.map +1 -1
- package/lib/widgets/dragAndDrop.js +0 -0
- package/lib/widgets/dragAndDrop.js.map +1 -1
- package/lib/widgets/error.d.ts +0 -12
- package/lib/widgets/error.d.ts.map +1 -1
- package/lib/widgets/error.js +5 -0
- package/lib/widgets/error.js.map +1 -1
- package/lib/widgets/forms/autocomplete/autocompleteBar.d.ts +0 -0
- package/lib/widgets/forms/autocomplete/autocompleteBar.d.ts.map +0 -0
- package/lib/widgets/forms/autocomplete/autocompleteBar.js +0 -0
- package/lib/widgets/forms/autocomplete/autocompleteBar.js.map +1 -1
- package/lib/widgets/forms/autocomplete/autocompleteField.d.ts +0 -0
- package/lib/widgets/forms/autocomplete/autocompleteField.d.ts.map +0 -0
- package/lib/widgets/forms/autocomplete/autocompleteField.js +0 -0
- package/lib/widgets/forms/autocomplete/autocompleteField.js.map +1 -1
- package/lib/widgets/forms/autocomplete/autocompletePicker.d.ts +0 -0
- package/lib/widgets/forms/autocomplete/autocompletePicker.d.ts.map +0 -0
- package/lib/widgets/forms/autocomplete/autocompletePicker.js +0 -0
- package/lib/widgets/forms/autocomplete/autocompletePicker.js.map +1 -1
- package/lib/widgets/forms/autocomplete/language.d.ts +0 -0
- package/lib/widgets/forms/autocomplete/language.d.ts.map +0 -0
- package/lib/widgets/forms/autocomplete/language.js +0 -0
- package/lib/widgets/forms/autocomplete/language.js.map +1 -1
- package/lib/widgets/forms/autocomplete/publicData.d.ts +0 -0
- package/lib/widgets/forms/autocomplete/publicData.d.ts.map +0 -0
- package/lib/widgets/forms/autocomplete/publicData.js +0 -0
- package/lib/widgets/forms/autocomplete/publicData.js.map +1 -1
- package/lib/widgets/forms/basic.d.ts +0 -0
- package/lib/widgets/forms/basic.d.ts.map +0 -0
- package/lib/widgets/forms/basic.js +0 -0
- package/lib/widgets/forms/basic.js.map +1 -1
- package/lib/widgets/forms/comment.d.ts +0 -0
- package/lib/widgets/forms/comment.d.ts.map +0 -0
- package/lib/widgets/forms/comment.js +0 -0
- package/lib/widgets/forms/comment.js.map +1 -1
- package/lib/widgets/forms/fieldFunction.d.ts +0 -0
- package/lib/widgets/forms/fieldFunction.d.ts.map +0 -0
- package/lib/widgets/forms/fieldFunction.js +0 -0
- package/lib/widgets/forms/fieldFunction.js.map +1 -1
- package/lib/widgets/forms/fieldParams.d.ts +0 -0
- package/lib/widgets/forms/fieldParams.d.ts.map +0 -0
- package/lib/widgets/forms/fieldParams.js +0 -0
- package/lib/widgets/forms/fieldParams.js.map +1 -1
- package/lib/widgets/forms/formStyle.d.ts +0 -0
- package/lib/widgets/forms/formStyle.d.ts.map +0 -0
- package/lib/widgets/forms/formStyle.js +0 -0
- package/lib/widgets/forms/formStyle.js.map +1 -1
- package/lib/widgets/forms.js +694 -150
- package/lib/widgets/forms.js.map +1 -1
- package/lib/widgets/index.js +0 -0
- package/lib/widgets/index.js.map +1 -1
- package/lib/widgets/multiSelect.js +784 -0
- package/lib/widgets/multiSelect.js.map +1 -0
- package/lib/widgets/peoplePicker.js +0 -0
- package/lib/widgets/peoplePicker.js.map +1 -1
- package/lib/widgets/widgetHelpers.d.ts +0 -0
- package/lib/widgets/widgetHelpers.d.ts.map +0 -0
- package/lib/widgets/widgetHelpers.js +0 -0
- package/lib/widgets/widgetHelpers.js.map +1 -1
- package/package.json +51 -47
package/lib/widgets/forms.js
CHANGED
|
@@ -22,6 +22,12 @@ Object.defineProperty(exports, "field", {
|
|
|
22
22
|
return _fieldFunction.field;
|
|
23
23
|
}
|
|
24
24
|
});
|
|
25
|
+
Object.defineProperty(exports, "fieldFunction", {
|
|
26
|
+
enumerable: true,
|
|
27
|
+
get: function get() {
|
|
28
|
+
return _fieldFunction.fieldFunction;
|
|
29
|
+
}
|
|
30
|
+
});
|
|
25
31
|
Object.defineProperty(exports, "fieldLabel", {
|
|
26
32
|
enumerable: true,
|
|
27
33
|
get: function get() {
|
|
@@ -44,8 +50,16 @@ exports.findClosest = findClosest;
|
|
|
44
50
|
exports.formsFor = formsFor;
|
|
45
51
|
exports.makeDescription = makeDescription;
|
|
46
52
|
exports.makeSelectForCategory = makeSelectForCategory;
|
|
53
|
+
exports.makeSelectForChoice = makeSelectForChoice;
|
|
54
|
+
exports.makeSelectForClassifierOptions = makeSelectForClassifierOptions;
|
|
47
55
|
exports.makeSelectForNestedCategory = makeSelectForNestedCategory;
|
|
48
56
|
exports.makeSelectForOptions = makeSelectForOptions;
|
|
57
|
+
Object.defineProperty(exports, "mostSpecificClassURI", {
|
|
58
|
+
enumerable: true,
|
|
59
|
+
get: function get() {
|
|
60
|
+
return _fieldFunction.mostSpecificClassURI;
|
|
61
|
+
}
|
|
62
|
+
});
|
|
49
63
|
exports.newButton = newButton;
|
|
50
64
|
exports.newThing = newThing;
|
|
51
65
|
exports.promptForNew = promptForNew;
|
|
@@ -93,6 +107,8 @@ var _solidLogic = require("solid-logic");
|
|
|
93
107
|
|
|
94
108
|
var utils = _interopRequireWildcard(require("../utils"));
|
|
95
109
|
|
|
110
|
+
var _multiSelect = require("./multiSelect");
|
|
111
|
+
|
|
96
112
|
var widgets = _interopRequireWildcard(require("../widgets"));
|
|
97
113
|
|
|
98
114
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
@@ -155,6 +171,7 @@ _fieldFunction.field[ns.ui('Form').uri] = _fieldFunction.field[ns.ui('Group').ur
|
|
|
155
171
|
var ui = ns.ui;
|
|
156
172
|
if (container) container.appendChild(box); // Prevent loops
|
|
157
173
|
|
|
174
|
+
if (!form) return;
|
|
158
175
|
var key = subject.toNT() + '|' + form.toNT();
|
|
159
176
|
|
|
160
177
|
if (already[key]) {
|
|
@@ -264,47 +281,43 @@ _fieldFunction.field[ns.ui('Options').uri] = function (dom, container, already,
|
|
|
264
281
|
values = kb.each(subject, dependingOn);
|
|
265
282
|
}
|
|
266
283
|
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
for (var i = 0; i < cases.length; i++) {
|
|
271
|
-
var c = cases[i];
|
|
272
|
-
var tests = kb.each(c, ui('for'), null, formDoc); // There can be multiple 'for'
|
|
284
|
+
for (var i = 0; i < cases.length; i++) {
|
|
285
|
+
var c = cases[i];
|
|
286
|
+
var tests = kb.each(c, ui('for'), null, formDoc); // There can be multiple 'for'
|
|
273
287
|
|
|
274
|
-
|
|
288
|
+
var match = false;
|
|
275
289
|
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
290
|
+
for (var j = 0; j < tests.length; j++) {
|
|
291
|
+
var _iterator = _createForOfIteratorHelper(values),
|
|
292
|
+
_step;
|
|
279
293
|
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
294
|
+
try {
|
|
295
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
296
|
+
var value = _step.value;
|
|
297
|
+
var test = tests[j];
|
|
284
298
|
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
}
|
|
299
|
+
if (value.sameTerm(tests) || value.termType === test.termType && value.value === test.value) {
|
|
300
|
+
match = true;
|
|
288
301
|
}
|
|
289
|
-
} catch (err) {
|
|
290
|
-
_iterator.e(err);
|
|
291
|
-
} finally {
|
|
292
|
-
_iterator.f();
|
|
293
302
|
}
|
|
303
|
+
} catch (err) {
|
|
304
|
+
_iterator.e(err);
|
|
305
|
+
} finally {
|
|
306
|
+
_iterator.f();
|
|
294
307
|
}
|
|
308
|
+
}
|
|
295
309
|
|
|
296
|
-
|
|
297
|
-
|
|
310
|
+
if (match) {
|
|
311
|
+
var _field3 = kb.the(c, ui('use'));
|
|
298
312
|
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
}
|
|
305
|
-
|
|
306
|
-
break;
|
|
313
|
+
if (!_field3) {
|
|
314
|
+
box.appendChild((0, _error.errorMessageBlock)(dom, 'No "use" part for case in form ' + form));
|
|
315
|
+
return box;
|
|
316
|
+
} else {
|
|
317
|
+
appendForm(dom, box, already, subject, _field3, dataDoc, callbackFunction);
|
|
307
318
|
}
|
|
319
|
+
|
|
320
|
+
break;
|
|
308
321
|
}
|
|
309
322
|
} // @@ Add box.refresh() to sync fields with values
|
|
310
323
|
|
|
@@ -1042,9 +1055,6 @@ _fieldFunction.field[ns.ui('Choice').uri] = function (dom, container, already, s
|
|
|
1042
1055
|
var kb = _solidLogic.store;
|
|
1043
1056
|
var formDoc = form.doc ? form.doc() : null; // @@ if blank no way to know
|
|
1044
1057
|
|
|
1045
|
-
var uiMultipleInUse = false; // this signals to ui:choice that it is part of a ui:multiple
|
|
1046
|
-
|
|
1047
|
-
var multiSelect = false;
|
|
1048
1058
|
var p;
|
|
1049
1059
|
var box = dom.createElement('div');
|
|
1050
1060
|
box.setAttribute('class', 'choiceBox'); // Set flexDirection column?
|
|
@@ -1070,108 +1080,142 @@ _fieldFunction.field[ns.ui('Choice').uri] = function (dom, container, already, s
|
|
|
1070
1080
|
}
|
|
1071
1081
|
|
|
1072
1082
|
var subForm = kb.any(form, ui('use')); // Optional
|
|
1073
|
-
|
|
1074
|
-
var follow = kb.anyJS(form, ui('follow'), null, formDoc); // data doc moves to new subject?
|
|
1075
|
-
|
|
1076
|
-
var possible = [];
|
|
1077
|
-
var possibleProperties;
|
|
1078
|
-
var firstSelectOptionText = '* Select for ' + utils.label(subject, true) + ' *'; // if we do NOT have a container it means it is a ui:Multiple
|
|
1079
|
-
// only important for the first option text in select
|
|
1080
|
-
|
|
1081
|
-
if (!container) {
|
|
1082
|
-
uiMultipleInUse = true;
|
|
1083
|
-
firstSelectOptionText = utils.label(subject, true);
|
|
1084
|
-
}
|
|
1085
|
-
|
|
1086
|
-
if (subject.termType === 'BlankNode') {
|
|
1087
|
-
firstSelectOptionText = '* Select for ' + utils.label(property) + ' *';
|
|
1088
|
-
}
|
|
1083
|
+
// const follow = kb.anyJS(form, ui('follow'), null, formDoc) // data doc moves to new subject?
|
|
1089
1084
|
|
|
1090
1085
|
var opts = {
|
|
1091
1086
|
form: form,
|
|
1092
1087
|
subForm: subForm,
|
|
1093
|
-
multiSelect: multiSelect,
|
|
1094
|
-
firstSelectOptionText: firstSelectOptionText,
|
|
1095
|
-
uiMultipleInUse: uiMultipleInUse,
|
|
1096
1088
|
disambiguate: false
|
|
1097
1089
|
};
|
|
1098
|
-
possible = kb.each(undefined, ns.rdf('type'), uiFrom, formDoc);
|
|
1099
1090
|
|
|
1100
|
-
|
|
1101
|
-
possible
|
|
1102
|
-
|
|
1091
|
+
function getSelectorOptions() {
|
|
1092
|
+
var possible = [];
|
|
1093
|
+
var possibleProperties;
|
|
1094
|
+
possible = kb.each(undefined, ns.rdf('type'), uiFrom, formDoc);
|
|
1103
1095
|
|
|
1096
|
+
for (var x in findMembersNT(kb, uiFrom, dataDoc)) {
|
|
1097
|
+
possible.push(kb.fromNT(x));
|
|
1098
|
+
} // Use rdfs
|
|
1104
1099
|
|
|
1105
|
-
if (uiFrom.sameTerm(ns.rdfs('Class'))) {
|
|
1106
|
-
for (p in buttons.allClassURIs()) {
|
|
1107
|
-
possible.push(kb.sym(p));
|
|
1108
|
-
} // log.debug("%%% Choice field: possible.length 2 = "+possible.length)
|
|
1109
1100
|
|
|
1110
|
-
|
|
1111
|
-
|
|
1101
|
+
if (uiFrom.sameTerm(ns.rdfs('Class'))) {
|
|
1102
|
+
for (p in buttons.allClassURIs()) {
|
|
1103
|
+
possible.push(kb.sym(p));
|
|
1104
|
+
} // log.debug("%%% Choice field: possible.length 2 = "+possible.length)
|
|
1112
1105
|
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
}
|
|
1106
|
+
} else if (uiFrom.sameTerm(ns.rdf('Property'))) {
|
|
1107
|
+
possibleProperties = buttons.propertyTriage(kb);
|
|
1116
1108
|
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
|
|
1109
|
+
for (p in possibleProperties.op) {
|
|
1110
|
+
possible.push(kb.fromNT(p));
|
|
1111
|
+
}
|
|
1120
1112
|
|
|
1121
|
-
|
|
1122
|
-
|
|
1123
|
-
|
|
1113
|
+
for (p in possibleProperties.dp) {
|
|
1114
|
+
possible.push(kb.fromNT(p));
|
|
1115
|
+
}
|
|
1124
1116
|
|
|
1125
|
-
|
|
1126
|
-
|
|
1127
|
-
|
|
1117
|
+
opts.disambiguate = true; // This is a big class, and the labels won't be enough.
|
|
1118
|
+
} else if (uiFrom.sameTerm(ns.owl('ObjectProperty'))) {
|
|
1119
|
+
possibleProperties = buttons.propertyTriage(kb);
|
|
1128
1120
|
|
|
1129
|
-
|
|
1130
|
-
|
|
1131
|
-
|
|
1121
|
+
for (p in possibleProperties.op) {
|
|
1122
|
+
possible.push(kb.fromNT(p));
|
|
1123
|
+
}
|
|
1124
|
+
|
|
1125
|
+
opts.disambiguate = true;
|
|
1126
|
+
} else if (uiFrom.sameTerm(ns.owl('DatatypeProperty'))) {
|
|
1127
|
+
possibleProperties = buttons.propertyTriage(kb);
|
|
1128
|
+
|
|
1129
|
+
for (p in possibleProperties.dp) {
|
|
1130
|
+
possible.push(kb.fromNT(p));
|
|
1131
|
+
}
|
|
1132
1132
|
|
|
1133
|
-
|
|
1134
|
-
possible.push(kb.fromNT(p));
|
|
1133
|
+
opts.disambiguate = true;
|
|
1135
1134
|
}
|
|
1136
1135
|
|
|
1137
|
-
|
|
1138
|
-
}
|
|
1136
|
+
return possible; // return sortByLabel(possible)
|
|
1137
|
+
} // TODO: this checks for any occurrence, regardless of true or false setting
|
|
1139
1138
|
|
|
1140
|
-
var sortedPossible = sortByLabel(possible); // TODO: this checks for any occurrence, regardless of true or false setting
|
|
1141
1139
|
|
|
1142
1140
|
if (kb.any(form, ui('canMintNew'))) {
|
|
1143
1141
|
opts.mint = '* Create new *'; // @@ could be better
|
|
1144
1142
|
}
|
|
1145
1143
|
|
|
1146
|
-
var
|
|
1147
|
-
rhs.appendChild(selector);
|
|
1148
|
-
var object;
|
|
1144
|
+
var multiSelect = kb.any(form, ui('multiselect')); // Optional
|
|
1149
1145
|
|
|
1150
|
-
if (
|
|
1151
|
-
|
|
1152
|
-
} else {
|
|
1153
|
-
object = kb.any(subject, property);
|
|
1154
|
-
}
|
|
1146
|
+
if (multiSelect) opts.multiSelect = true;
|
|
1147
|
+
var selector;
|
|
1155
1148
|
|
|
1156
|
-
|
|
1157
|
-
|
|
1158
|
-
|
|
1159
|
-
|
|
1149
|
+
rhs.refresh = function () {
|
|
1150
|
+
// from ui:property
|
|
1151
|
+
var selectedOptions = kb.each(subject, property, null, dataDoc).map(function (object) {
|
|
1152
|
+
return object.value;
|
|
1153
|
+
}); // from ui:from + ui:property
|
|
1160
1154
|
|
|
1161
|
-
|
|
1162
|
-
|
|
1163
|
-
|
|
1164
|
-
|
|
1165
|
-
|
|
1166
|
-
|
|
1167
|
-
*/
|
|
1155
|
+
var possibleOptions = getSelectorOptions();
|
|
1156
|
+
possibleOptions.push(selectedOptions);
|
|
1157
|
+
possibleOptions = sortByLabel(possibleOptions);
|
|
1158
|
+
selector = makeSelectForChoice(dom, rhs, kb, subject, property, possibleOptions, selectedOptions, uiFrom, opts, dataDoc, callbackFunction);
|
|
1159
|
+
rhs.innerHTML = '';
|
|
1160
|
+
rhs.appendChild(selector);
|
|
1168
1161
|
|
|
1162
|
+
if (multiSelect) {
|
|
1163
|
+
var multiSelectDiv = new _multiSelect.IconicMultiSelect({
|
|
1164
|
+
placeholder: selector.selected,
|
|
1165
|
+
select: selector,
|
|
1166
|
+
container: rhs,
|
|
1167
|
+
textField: 'textField',
|
|
1168
|
+
valueField: 'valueField'
|
|
1169
|
+
});
|
|
1170
|
+
multiSelectDiv.init();
|
|
1171
|
+
multiSelectDiv.subscribe(function (event) {
|
|
1172
|
+
if (event.action === 'REMOVE_OPTION') {
|
|
1173
|
+
selectedOptions = selectedOptions.filter(function (value) {
|
|
1174
|
+
return value !== event.value;
|
|
1175
|
+
});
|
|
1176
|
+
}
|
|
1169
1177
|
|
|
1170
|
-
|
|
1171
|
-
|
|
1172
|
-
|
|
1173
|
-
|
|
1174
|
-
|
|
1178
|
+
if (event.action === 'CLEAR_ALL_OPTIONS') {
|
|
1179
|
+
selectedOptions = [];
|
|
1180
|
+
}
|
|
1181
|
+
|
|
1182
|
+
if (event.action === 'ADD_OPTION') {
|
|
1183
|
+
var stringValue = event.value + '';
|
|
1184
|
+
|
|
1185
|
+
if (stringValue.includes('Create new')) {
|
|
1186
|
+
var newObject = newThing(dataDoc);
|
|
1187
|
+
var is = [];
|
|
1188
|
+
is.push($rdf.st(subject, property, kb.sym(newObject), dataDoc));
|
|
1189
|
+
if (uiFrom) is.push($rdf.st(newObject, ns.rdf('type'), kb.sym(uiFrom), dataDoc));
|
|
1190
|
+
|
|
1191
|
+
if (subForm) {
|
|
1192
|
+
addSubFormChoice(dom, rhs, {}, $rdf.sym(newObject), subForm, dataDoc, function (ok, body) {
|
|
1193
|
+
if (ok) {
|
|
1194
|
+
kb.updater.update([], is, function (uri, success, errorBody) {
|
|
1195
|
+
if (!success) rhs.appendChild((0, _error.errorMessageBlock)(dom, 'Error updating select: ' + errorBody));
|
|
1196
|
+
});
|
|
1197
|
+
selectedOptions.push(newObject);
|
|
1198
|
+
if (callbackFunction) callbackFunction(ok, {
|
|
1199
|
+
widget: 'select',
|
|
1200
|
+
event: 'new'
|
|
1201
|
+
});
|
|
1202
|
+
} else {
|
|
1203
|
+
rhs.appendChild((0, _error.errorMessageBlock)(dom, 'Error updating data in field of select: ' + body));
|
|
1204
|
+
}
|
|
1205
|
+
});
|
|
1206
|
+
}
|
|
1207
|
+
} else selectedOptions.push(event.value);
|
|
1208
|
+
}
|
|
1209
|
+
|
|
1210
|
+
selector.update(selectedOptions);
|
|
1211
|
+
});
|
|
1212
|
+
}
|
|
1213
|
+
};
|
|
1214
|
+
|
|
1215
|
+
rhs.refresh();
|
|
1216
|
+
if (selector && selector.refresh) selector.refresh();
|
|
1217
|
+
return box;
|
|
1218
|
+
};
|
|
1175
1219
|
|
|
1176
1220
|
function addSubFormChoice(dom, selectDiv, already, subject, subForm, dataDoc, callbackFunction) {
|
|
1177
1221
|
(0, _fieldFunction.fieldFunction)(dom, subForm)(dom, selectDiv, already, subject, subForm, dataDoc, callbackFunction);
|
|
@@ -1514,10 +1558,9 @@ function makeDescription(dom, kb, subject, predicate, dataDoc, callbackFunction)
|
|
|
1514
1558
|
// @param subject - a term, the subject of the statement(s) being edited.
|
|
1515
1559
|
// @param predicate - a term, the predicate of the statement(s) being edited
|
|
1516
1560
|
// @param possible - a list of terms, the possible value the object can take
|
|
1517
|
-
// @param options.
|
|
1518
|
-
// @param options.
|
|
1519
|
-
// option for none selected (for non
|
|
1520
|
-
// @param options.uiMultipleInUse - signals that the ui:choise is used with a ui:multiple
|
|
1561
|
+
// @param options.multiple - Boolean - Whether more than one at a time is allowed
|
|
1562
|
+
// @param options.nullLabel - a string to be displayed as the
|
|
1563
|
+
// option for none selected (for non multiple)
|
|
1521
1564
|
// @param options.mint - User may create thing if this sent to the prompt string eg "New foo"
|
|
1522
1565
|
// @param options.subForm - If mint, then the form to be used for minting the new thing
|
|
1523
1566
|
// @param dataDoc - The web document being edited
|
|
@@ -1525,7 +1568,7 @@ function makeDescription(dom, kb, subject, predicate, dataDoc, callbackFunction)
|
|
|
1525
1568
|
*/
|
|
1526
1569
|
|
|
1527
1570
|
|
|
1528
|
-
function
|
|
1571
|
+
function makeSelectForClassifierOptions(dom, kb, subject, predicate, possible, options, dataDoc, callbackFunction) {
|
|
1529
1572
|
log.debug('Select list length now ' + possible.length);
|
|
1530
1573
|
var n = 0;
|
|
1531
1574
|
var uris = {}; // Count them
|
|
@@ -1535,7 +1578,7 @@ function makeSelectForOptions(dom, kb, subject, predicate, possible, uiFrom, opt
|
|
|
1535
1578
|
for (var i = 0; i < possible.length; i++) {
|
|
1536
1579
|
var sub = possible[i]; // @@ Maybe; make this so it works with blank nodes too
|
|
1537
1580
|
|
|
1538
|
-
if (!sub.uri) debug.warn("
|
|
1581
|
+
if (!sub.uri) debug.warn("makeSelectForClassifierOptions: option does not have an uri: ".concat(sub, ", with predicate: ").concat(predicate));
|
|
1539
1582
|
if (!sub.uri || sub.uri in uris) continue;
|
|
1540
1583
|
uris[sub.uri] = true;
|
|
1541
1584
|
n++;
|
|
@@ -1546,7 +1589,7 @@ function makeSelectForOptions(dom, kb, subject, predicate, possible, uiFrom, opt
|
|
|
1546
1589
|
return (0, _error.errorMessageBlock)(dom, "Can't do selector with no options, subject= " + subject + ' property = ' + predicate + '.');
|
|
1547
1590
|
}
|
|
1548
1591
|
|
|
1549
|
-
log.debug('
|
|
1592
|
+
log.debug('makeSelectForClassifierOptions: dataDoc=' + dataDoc);
|
|
1550
1593
|
var actual;
|
|
1551
1594
|
|
|
1552
1595
|
var getActual = function getActual() {
|
|
@@ -1556,9 +1599,7 @@ function makeSelectForOptions(dom, kb, subject, predicate, possible, uiFrom, opt
|
|
|
1556
1599
|
actual = kb.findTypeURIs(subject);
|
|
1557
1600
|
} else {
|
|
1558
1601
|
kb.each(subject, predicate, null, dataDoc).forEach(function (x) {
|
|
1559
|
-
|
|
1560
|
-
actual[x.uri] = true;
|
|
1561
|
-
}
|
|
1602
|
+
actual[x.uri] = true;
|
|
1562
1603
|
});
|
|
1563
1604
|
}
|
|
1564
1605
|
|
|
@@ -1568,6 +1609,8 @@ function makeSelectForOptions(dom, kb, subject, predicate, possible, uiFrom, opt
|
|
|
1568
1609
|
actual = getActual();
|
|
1569
1610
|
|
|
1570
1611
|
var onChange = function onChange(_e) {
|
|
1612
|
+
select.disabled = true; // until data written back - gives user feedback too
|
|
1613
|
+
|
|
1571
1614
|
var ds = [];
|
|
1572
1615
|
var is = [];
|
|
1573
1616
|
|
|
@@ -1583,7 +1626,6 @@ function makeSelectForOptions(dom, kb, subject, predicate, possible, uiFrom, opt
|
|
|
1583
1626
|
var opt = select.options[_i];
|
|
1584
1627
|
|
|
1585
1628
|
if (opt.selected && opt.AJAR_mint) {
|
|
1586
|
-
// not sure if this 'if' is used because I cannot find mintClass
|
|
1587
1629
|
if (options.mintClass) {
|
|
1588
1630
|
var thisForm = promptForNew(dom, kb, subject, predicate, options.mintClass, null, dataDoc, function (ok, body) {
|
|
1589
1631
|
if (!ok) {
|
|
@@ -1598,14 +1640,11 @@ function makeSelectForOptions(dom, kb, subject, predicate, possible, uiFrom, opt
|
|
|
1598
1640
|
newObject = newThing(dataDoc);
|
|
1599
1641
|
}
|
|
1600
1642
|
|
|
1601
|
-
is.push($rdf.st(subject, predicate,
|
|
1602
|
-
if (uiFrom) is.push($rdf.st(newObject, ns.rdf('type'), kb.sym(uiFrom), dataDoc)); // not sure if this 'if' is used because I cannot find mintStatementsFun
|
|
1643
|
+
is.push($rdf.st(subject, predicate, newObject, dataDoc));
|
|
1603
1644
|
|
|
1604
1645
|
if (options.mintStatementsFun) {
|
|
1605
1646
|
is = is.concat(options.mintStatementsFun(newObject));
|
|
1606
1647
|
}
|
|
1607
|
-
|
|
1608
|
-
select.currentURI = newObject;
|
|
1609
1648
|
}
|
|
1610
1649
|
|
|
1611
1650
|
if (!opt.AJAR_uri) continue; // a prompt or mint
|
|
@@ -1613,7 +1652,11 @@ function makeSelectForOptions(dom, kb, subject, predicate, possible, uiFrom, opt
|
|
|
1613
1652
|
if (opt.selected && !(opt.AJAR_uri in actual)) {
|
|
1614
1653
|
// new class
|
|
1615
1654
|
is.push($rdf.st(subject, predicate, kb.sym(opt.AJAR_uri), dataDoc));
|
|
1616
|
-
|
|
1655
|
+
}
|
|
1656
|
+
|
|
1657
|
+
if (!opt.selected && opt.AJAR_uri in actual) {
|
|
1658
|
+
// old class
|
|
1659
|
+
removeValue(kb.sym(opt.AJAR_uri));
|
|
1617
1660
|
}
|
|
1618
1661
|
|
|
1619
1662
|
if (opt.selected) select.currentURI = opt.AJAR_uri;
|
|
@@ -1633,29 +1676,38 @@ function makeSelectForOptions(dom, kb, subject, predicate, possible, uiFrom, opt
|
|
|
1633
1676
|
sel = sel.superSelect;
|
|
1634
1677
|
}
|
|
1635
1678
|
|
|
1636
|
-
|
|
1679
|
+
function doneNew(ok, _body) {
|
|
1680
|
+
callbackFunction(ok, {
|
|
1681
|
+
widget: 'select',
|
|
1682
|
+
event: 'new'
|
|
1683
|
+
});
|
|
1684
|
+
}
|
|
1685
|
+
|
|
1686
|
+
log.info('makeSelectForClassifierOptions: data doc = ' + dataDoc);
|
|
1687
|
+
kb.updater.update(ds, is, function (uri, ok, body) {
|
|
1688
|
+
actual = getActual(); // refresh
|
|
1637
1689
|
|
|
1638
|
-
removeNextSiblingsAfterElement(select);
|
|
1639
|
-
addSubFormChoice(dom, select.parentNode, {}, $rdf.sym(select.currentURI), options.subForm, dataDoc, function (ok, body) {
|
|
1640
1690
|
if (ok) {
|
|
1641
|
-
|
|
1642
|
-
|
|
1643
|
-
|
|
1644
|
-
|
|
1645
|
-
|
|
1646
|
-
|
|
1647
|
-
widget: 'select',
|
|
1648
|
-
event: 'new'
|
|
1649
|
-
});
|
|
1691
|
+
select.disabled = false; // data written back
|
|
1692
|
+
|
|
1693
|
+
if (newObject) {
|
|
1694
|
+
var fn = (0, _fieldFunction.fieldFunction)(dom, options.subForm);
|
|
1695
|
+
fn(dom, select.parentNode, {}, newObject, options.subForm, dataDoc, doneNew);
|
|
1696
|
+
}
|
|
1650
1697
|
} else {
|
|
1651
|
-
select.parentNode.appendChild((0, _error.errorMessageBlock)(dom, 'Error updating data in
|
|
1698
|
+
return select.parentNode.appendChild((0, _error.errorMessageBlock)(dom, 'Error updating data in select: ' + body));
|
|
1652
1699
|
}
|
|
1700
|
+
|
|
1701
|
+
if (callbackFunction) callbackFunction(ok, {
|
|
1702
|
+
widget: 'select',
|
|
1703
|
+
event: 'change'
|
|
1704
|
+
});
|
|
1653
1705
|
});
|
|
1654
1706
|
};
|
|
1655
1707
|
|
|
1656
1708
|
var select = dom.createElement('select');
|
|
1657
1709
|
select.setAttribute('style', style.formSelectSTyle);
|
|
1658
|
-
if (options.
|
|
1710
|
+
if (options.multiple) select.setAttribute('multiple', 'true');
|
|
1659
1711
|
select.currentURI = null;
|
|
1660
1712
|
|
|
1661
1713
|
select.refresh = function () {
|
|
@@ -1706,14 +1758,184 @@ function makeSelectForOptions(dom, kb, subject, predicate, possible, uiFrom, opt
|
|
|
1706
1758
|
select.insertBefore(mint, select.firstChild);
|
|
1707
1759
|
}
|
|
1708
1760
|
|
|
1709
|
-
if (
|
|
1761
|
+
if (select.currentURI == null && !options.multiple) {
|
|
1710
1762
|
var prompt = dom.createElement('option');
|
|
1711
|
-
prompt.appendChild(dom.createTextNode(options.
|
|
1712
|
-
prompt.
|
|
1713
|
-
prompt.value = true;
|
|
1714
|
-
prompt.hidden = true;
|
|
1763
|
+
prompt.appendChild(dom.createTextNode(options.nullLabel));
|
|
1764
|
+
select.insertBefore(prompt, select.firstChild);
|
|
1715
1765
|
prompt.selected = true;
|
|
1766
|
+
}
|
|
1767
|
+
|
|
1768
|
+
if (editable) {
|
|
1769
|
+
select.addEventListener('change', onChange, false);
|
|
1770
|
+
}
|
|
1771
|
+
|
|
1772
|
+
return select;
|
|
1773
|
+
} // makeSelectForClassifierOptions
|
|
1774
|
+
|
|
1775
|
+
/** Make SELECT element to select options
|
|
1776
|
+
//
|
|
1777
|
+
// @param subject - a term, the subject of the statement(s) being edited.
|
|
1778
|
+
// @param predicate - a term, the predicate of the statement(s) being edited
|
|
1779
|
+
// @param possible - a list of terms, the possible value the object can take
|
|
1780
|
+
// @param options.nullLabel - a string to be displayed as the
|
|
1781
|
+
// option for none selected (for non multiple)
|
|
1782
|
+
// @param options.subForm - If mint, then the form to be used for minting the new thing
|
|
1783
|
+
// @param dataDoc - The web document being edited
|
|
1784
|
+
// @param callbackFunction - takes (boolean ok, string errorBody)
|
|
1785
|
+
*/
|
|
1786
|
+
|
|
1787
|
+
|
|
1788
|
+
function makeSelectForOptions(dom, kb, subject, predicate, possible, options, dataDoc, callbackFunction) {
|
|
1789
|
+
log.debug('Select list length now ' + possible.length);
|
|
1790
|
+
var n = 0;
|
|
1791
|
+
var uris = {}; // Count them
|
|
1792
|
+
|
|
1793
|
+
var editable = kb.updater.editable(dataDoc.uri);
|
|
1794
|
+
|
|
1795
|
+
for (var i = 0; i < possible.length; i++) {
|
|
1796
|
+
var sub = possible[i]; // @@ Maybe; make this so it works with blank nodes too
|
|
1797
|
+
|
|
1798
|
+
if (!sub.uri) debug.warn("makeSelectForOptions: option does not have an uri: ".concat(sub, ", with predicate: ").concat(predicate));
|
|
1799
|
+
if (!sub.uri || sub.uri in uris) continue;
|
|
1800
|
+
uris[sub.uri] = true;
|
|
1801
|
+
n++;
|
|
1802
|
+
} // uris is now the set of possible options
|
|
1803
|
+
|
|
1804
|
+
|
|
1805
|
+
if (n === 0) {
|
|
1806
|
+
return (0, _error.errorMessageBlock)(dom, "Can't do selector with no options, subject= " + subject + ' property = ' + predicate + '.');
|
|
1807
|
+
}
|
|
1808
|
+
|
|
1809
|
+
log.debug('makeSelectForOptions: dataDoc=' + dataDoc);
|
|
1810
|
+
var actual;
|
|
1811
|
+
|
|
1812
|
+
var getActual = function getActual() {
|
|
1813
|
+
actual = {};
|
|
1814
|
+
|
|
1815
|
+
if (predicate.sameTerm(ns.rdf('type'))) {
|
|
1816
|
+
actual = kb.findTypeURIs(subject);
|
|
1817
|
+
} else {
|
|
1818
|
+
kb.each(subject, predicate, null, dataDoc).forEach(function (x) {
|
|
1819
|
+
if (x.uri) {
|
|
1820
|
+
actual[x.uri] = true;
|
|
1821
|
+
}
|
|
1822
|
+
});
|
|
1823
|
+
}
|
|
1824
|
+
|
|
1825
|
+
return actual;
|
|
1826
|
+
};
|
|
1827
|
+
|
|
1828
|
+
actual = getActual();
|
|
1829
|
+
|
|
1830
|
+
var onChange = function onChange(_e) {
|
|
1831
|
+
select.disabled = true; // until data written back - gives user feedback too
|
|
1832
|
+
|
|
1833
|
+
var ds = [];
|
|
1834
|
+
var is = [];
|
|
1835
|
+
|
|
1836
|
+
var removeValue = function removeValue(t) {
|
|
1837
|
+
if (kb.holds(subject, predicate, t, dataDoc)) {
|
|
1838
|
+
ds.push($rdf.st(subject, predicate, t, dataDoc));
|
|
1839
|
+
}
|
|
1840
|
+
};
|
|
1841
|
+
|
|
1842
|
+
for (var _i3 = 0; _i3 < select.options.length; _i3++) {
|
|
1843
|
+
var opt = select.options[_i3];
|
|
1844
|
+
if (!opt.AJAR_uri) continue; // a prompt or mint
|
|
1845
|
+
|
|
1846
|
+
if (opt.selected && !(opt.AJAR_uri in actual)) {
|
|
1847
|
+
// new class
|
|
1848
|
+
is.push($rdf.st(subject, predicate, kb.sym(opt.AJAR_uri), dataDoc));
|
|
1849
|
+
}
|
|
1850
|
+
|
|
1851
|
+
if (!opt.selected && opt.AJAR_uri in actual) {
|
|
1852
|
+
// old class
|
|
1853
|
+
removeValue(kb.sym(opt.AJAR_uri));
|
|
1854
|
+
}
|
|
1855
|
+
|
|
1856
|
+
if (opt.selected) select.currentURI = opt.AJAR_uri;
|
|
1857
|
+
}
|
|
1858
|
+
|
|
1859
|
+
var sel = select.subSelect; // All subclasses must also go
|
|
1860
|
+
|
|
1861
|
+
while (sel && sel.currentURI) {
|
|
1862
|
+
removeValue(kb.sym(sel.currentURI));
|
|
1863
|
+
sel = sel.subSelect;
|
|
1864
|
+
}
|
|
1865
|
+
|
|
1866
|
+
sel = select.superSelect; // All superclasses are redundant
|
|
1867
|
+
|
|
1868
|
+
while (sel && sel.currentURI) {
|
|
1869
|
+
removeValue(kb.sym(sel.currentURI));
|
|
1870
|
+
sel = sel.superSelect;
|
|
1871
|
+
}
|
|
1872
|
+
|
|
1873
|
+
log.info('selectForOptions: data doc = ' + dataDoc);
|
|
1874
|
+
kb.updater.update(ds, is, function (uri, ok, body) {
|
|
1875
|
+
actual = getActual(); // refresh
|
|
1876
|
+
|
|
1877
|
+
if (ok) {
|
|
1878
|
+
select.disabled = false; // data written back
|
|
1879
|
+
} else {
|
|
1880
|
+
return select.parentNode.appendChild((0, _error.errorMessageBlock)(dom, 'Error updating data in select: ' + body));
|
|
1881
|
+
}
|
|
1882
|
+
|
|
1883
|
+
if (callbackFunction) callbackFunction(ok, {
|
|
1884
|
+
widget: 'select',
|
|
1885
|
+
event: 'change'
|
|
1886
|
+
});
|
|
1887
|
+
});
|
|
1888
|
+
};
|
|
1889
|
+
|
|
1890
|
+
var select = dom.createElement('select');
|
|
1891
|
+
select.setAttribute('style', style.formSelectSTyle);
|
|
1892
|
+
select.currentURI = null;
|
|
1893
|
+
|
|
1894
|
+
select.refresh = function () {
|
|
1895
|
+
actual = getActual(); // refresh
|
|
1896
|
+
|
|
1897
|
+
for (var _i4 = 0; _i4 < select.children.length; _i4++) {
|
|
1898
|
+
var option = select.children[_i4];
|
|
1899
|
+
|
|
1900
|
+
if (option.AJAR_uri) {
|
|
1901
|
+
option.selected = option.AJAR_uri in actual;
|
|
1902
|
+
}
|
|
1903
|
+
}
|
|
1904
|
+
|
|
1905
|
+
select.disabled = false; // unlocked any conflict we had got into
|
|
1906
|
+
};
|
|
1907
|
+
|
|
1908
|
+
for (var uri in uris) {
|
|
1909
|
+
var c = kb.sym(uri);
|
|
1910
|
+
var option = dom.createElement('option');
|
|
1911
|
+
|
|
1912
|
+
if (options.disambiguate) {
|
|
1913
|
+
option.appendChild(dom.createTextNode(utils.labelWithOntology(c, true))); // Init. cap
|
|
1914
|
+
} else {
|
|
1915
|
+
option.appendChild(dom.createTextNode(utils.label(c, true))); // Init.
|
|
1916
|
+
}
|
|
1917
|
+
|
|
1918
|
+
var backgroundColor = kb.any(c, kb.sym('http://www.w3.org/ns/ui#backgroundColor'));
|
|
1919
|
+
|
|
1920
|
+
if (backgroundColor) {
|
|
1921
|
+
option.setAttribute('style', 'background-color: ' + backgroundColor.value + '; ');
|
|
1922
|
+
}
|
|
1923
|
+
|
|
1924
|
+
option.AJAR_uri = uri;
|
|
1925
|
+
|
|
1926
|
+
if (uri in actual) {
|
|
1927
|
+
option.setAttribute('selected', 'true');
|
|
1928
|
+
select.currentURI = uri; // dump("Already in class: "+ uri+"\n")
|
|
1929
|
+
}
|
|
1930
|
+
|
|
1931
|
+
select.appendChild(option);
|
|
1932
|
+
}
|
|
1933
|
+
|
|
1934
|
+
if (!select.currentURI) {
|
|
1935
|
+
var prompt = dom.createElement('option');
|
|
1936
|
+
prompt.appendChild(dom.createTextNode(options.nullLabel));
|
|
1716
1937
|
select.insertBefore(prompt, select.firstChild);
|
|
1938
|
+
prompt.selected = true;
|
|
1717
1939
|
}
|
|
1718
1940
|
|
|
1719
1941
|
if (editable) {
|
|
@@ -1732,11 +1954,11 @@ function makeSelectForOptions(dom, kb, subject, predicate, possible, uiFrom, opt
|
|
|
1732
1954
|
function makeSelectForCategory(dom, kb, subject, category, dataDoc, callbackFunction) {
|
|
1733
1955
|
var du = kb.any(category, ns.owl('disjointUnionOf'));
|
|
1734
1956
|
var subs;
|
|
1735
|
-
var
|
|
1957
|
+
var multiple = false;
|
|
1736
1958
|
|
|
1737
1959
|
if (!du) {
|
|
1738
1960
|
subs = kb.each(undefined, ns.rdfs('subClassOf'), category);
|
|
1739
|
-
|
|
1961
|
+
multiple = true;
|
|
1740
1962
|
} else {
|
|
1741
1963
|
subs = du.elements;
|
|
1742
1964
|
}
|
|
@@ -1744,15 +1966,16 @@ function makeSelectForCategory(dom, kb, subject, category, dataDoc, callbackFunc
|
|
|
1744
1966
|
log.debug('Select list length ' + subs.length);
|
|
1745
1967
|
|
|
1746
1968
|
if (subs.length === 0) {
|
|
1747
|
-
return (0, _error.errorMessageBlock)(dom, "Can't do " + (
|
|
1969
|
+
return (0, _error.errorMessageBlock)(dom, "Can't do " + (multiple ? 'multiple ' : '') + 'selector with no subclasses of category: ' + category);
|
|
1748
1970
|
}
|
|
1749
1971
|
|
|
1750
1972
|
if (subs.length === 1) {
|
|
1751
|
-
return (0, _error.errorMessageBlock)(dom, "Can't do " + (
|
|
1973
|
+
return (0, _error.errorMessageBlock)(dom, "Can't do " + (multiple ? 'multiple ' : '') + 'selector with only 1 subclass of category: ' + category + ':' + subs[1]);
|
|
1752
1974
|
}
|
|
1753
1975
|
|
|
1754
|
-
return
|
|
1755
|
-
|
|
1976
|
+
return makeSelectForClassifierOptions(dom, kb, subject, ns.rdf('type'), subs, {
|
|
1977
|
+
multiple: multiple,
|
|
1978
|
+
nullLabel: '* Select type *'
|
|
1756
1979
|
}, dataDoc, callbackFunction);
|
|
1757
1980
|
}
|
|
1758
1981
|
/** Make SELECT element to select subclasses recurively
|
|
@@ -1786,8 +2009,7 @@ function makeSelectForNestedCategory(dom, kb, subject, category, dataDoc, callba
|
|
|
1786
2009
|
function onChange(ok, body) {
|
|
1787
2010
|
if (ok) update();
|
|
1788
2011
|
callbackFunction(ok, body);
|
|
1789
|
-
}
|
|
1790
|
-
|
|
2012
|
+
}
|
|
1791
2013
|
|
|
1792
2014
|
var select = makeSelectForCategory(dom, kb, subject, category, dataDoc, onChange);
|
|
1793
2015
|
container.appendChild(select);
|
|
@@ -1942,4 +2164,326 @@ function newThing(doc) {
|
|
|
1942
2164
|
var now = new Date();
|
|
1943
2165
|
return $rdf.sym(doc.uri + '#' + 'id' + ('' + now.getTime()));
|
|
1944
2166
|
}
|
|
2167
|
+
/** Make SELECT element to select options
|
|
2168
|
+
//
|
|
2169
|
+
// @param subject - a term, the subject of the statement(s) being edited.
|
|
2170
|
+
// @param predicate - a term, the predicate of the statement(s) being edited
|
|
2171
|
+
// @param possible - a list of terms, the possible value the object can take
|
|
2172
|
+
// @param options.mint - User may create thing if this sent to the prompt string eg "New foo"
|
|
2173
|
+
// @param options.subForm - If mint, then the form to be used for minting the new thing
|
|
2174
|
+
// @param dataDoc - The web document being edited
|
|
2175
|
+
// @param callbackFunction - takes (boolean ok, string errorBody)
|
|
2176
|
+
*/
|
|
2177
|
+
|
|
2178
|
+
|
|
2179
|
+
function makeSelectForChoice(dom, container, kb, subject, predicate, inputPossibleOptions, selectedOptions, uiFrom, options, dataDoc, callbackFunction) {
|
|
2180
|
+
var optionsFromClassUIfrom = {}; // Count them
|
|
2181
|
+
|
|
2182
|
+
var editable = kb.updater.editable(dataDoc.uri);
|
|
2183
|
+
|
|
2184
|
+
for (var i = 0; i < inputPossibleOptions.length; i++) {
|
|
2185
|
+
var sub = inputPossibleOptions[i]; // @@ Maybe; make this so it works with blank nodes too
|
|
2186
|
+
// if (!sub.uri) debug.warn(`makeSelectForChoice: option does not have an uri: ${sub}, with predicate: ${predicate}`)
|
|
2187
|
+
|
|
2188
|
+
if (!sub.uri || sub.uri in optionsFromClassUIfrom) continue;
|
|
2189
|
+
optionsFromClassUIfrom[sub.uri] = true;
|
|
2190
|
+
}
|
|
2191
|
+
|
|
2192
|
+
var isEmpty = Object.keys(optionsFromClassUIfrom).length === 0;
|
|
2193
|
+
|
|
2194
|
+
if (isEmpty && !options.mint) {
|
|
2195
|
+
return (0, _error.errorMessageBlock)(dom, "Can't do selector with no options, subject= " + subject + ' property = ' + predicate + '.');
|
|
2196
|
+
}
|
|
2197
|
+
|
|
2198
|
+
log.debug('makeSelectForChoice: dataDoc=' + dataDoc);
|
|
2199
|
+
|
|
2200
|
+
function createDefaultSelectOptionText() {
|
|
2201
|
+
var firstSelectOptionText = '--- choice ---';
|
|
2202
|
+
|
|
2203
|
+
if (predicate && !(predicate.termType === 'BlankNode')) {
|
|
2204
|
+
firstSelectOptionText = '* Select for property: ' + utils.label(predicate) + ' *';
|
|
2205
|
+
}
|
|
2206
|
+
|
|
2207
|
+
if (subject && !(subject.termType === 'BlankNode')) {
|
|
2208
|
+
firstSelectOptionText = '* Select for ' + utils.label(subject, true) + ' *';
|
|
2209
|
+
}
|
|
2210
|
+
|
|
2211
|
+
return firstSelectOptionText;
|
|
2212
|
+
}
|
|
2213
|
+
|
|
2214
|
+
function createDefaultSelectOption() {
|
|
2215
|
+
var option = dom.createElement('option');
|
|
2216
|
+
option.appendChild(dom.createTextNode(createDefaultSelectOptionText()));
|
|
2217
|
+
option.disabled = true;
|
|
2218
|
+
option.value = true;
|
|
2219
|
+
option.hidden = true;
|
|
2220
|
+
option.selected = true;
|
|
2221
|
+
return option;
|
|
2222
|
+
}
|
|
2223
|
+
|
|
2224
|
+
var onChange = function onChange(_e) {
|
|
2225
|
+
container.removeChild(container.lastChild);
|
|
2226
|
+
select.refresh();
|
|
2227
|
+
};
|
|
2228
|
+
|
|
2229
|
+
var select = dom.createElement('select');
|
|
2230
|
+
select.setAttribute('style', style.formSelectSTyle);
|
|
2231
|
+
select.setAttribute('id', 'formSelect');
|
|
2232
|
+
select.currentURI = null;
|
|
2233
|
+
|
|
2234
|
+
for (var uri in optionsFromClassUIfrom) {
|
|
2235
|
+
select.appendChild(createOption(uri));
|
|
2236
|
+
}
|
|
2237
|
+
|
|
2238
|
+
if (editable && options.mint) {
|
|
2239
|
+
var mint = dom.createElement('option');
|
|
2240
|
+
mint.appendChild(dom.createTextNode(options.mint));
|
|
2241
|
+
mint.AJAR_mint = true; // Flag it
|
|
2242
|
+
|
|
2243
|
+
select.insertBefore(mint, select.firstChild);
|
|
2244
|
+
}
|
|
2245
|
+
|
|
2246
|
+
if (select.children.length === 0) select.insertBefore(createDefaultSelectOption(), select.firstChild);
|
|
2247
|
+
|
|
2248
|
+
select.update = function (newSelectedOptions) {
|
|
2249
|
+
selectedOptions = newSelectedOptions;
|
|
2250
|
+
var ds = [];
|
|
2251
|
+
var is = [];
|
|
2252
|
+
|
|
2253
|
+
var removeValue = function removeValue(t) {
|
|
2254
|
+
if (kb.holds(subject, predicate, t, dataDoc)) {
|
|
2255
|
+
ds.push($rdf.st(subject, predicate, t, dataDoc));
|
|
2256
|
+
}
|
|
2257
|
+
};
|
|
2258
|
+
|
|
2259
|
+
var addValue = function addValue(t) {
|
|
2260
|
+
if (!kb.holds(subject, predicate, t, dataDoc)) {
|
|
2261
|
+
is.push($rdf.st(subject, predicate, t, dataDoc)); // console.log("----value added " + t)
|
|
2262
|
+
}
|
|
2263
|
+
|
|
2264
|
+
if (uiFrom && !kb.holds(t, ns.rdf('type'), kb.sym(uiFrom), dataDoc)) {
|
|
2265
|
+
is.push($rdf.st(t, ns.rdf('type'), kb.sym(uiFrom), dataDoc)); // console.log("----added type to value " + uiFrom)
|
|
2266
|
+
}
|
|
2267
|
+
};
|
|
2268
|
+
|
|
2269
|
+
var existingValues = kb.each(subject, predicate, null, dataDoc).map(function (object) {
|
|
2270
|
+
return object.value;
|
|
2271
|
+
});
|
|
2272
|
+
|
|
2273
|
+
var _iterator2 = _createForOfIteratorHelper(existingValues),
|
|
2274
|
+
_step2;
|
|
2275
|
+
|
|
2276
|
+
try {
|
|
2277
|
+
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
2278
|
+
var value = _step2.value;
|
|
2279
|
+
if (!containsObject(value, selectedOptions)) removeValue($rdf.sym(value));
|
|
2280
|
+
}
|
|
2281
|
+
} catch (err) {
|
|
2282
|
+
_iterator2.e(err);
|
|
2283
|
+
} finally {
|
|
2284
|
+
_iterator2.f();
|
|
2285
|
+
}
|
|
2286
|
+
|
|
2287
|
+
var _iterator3 = _createForOfIteratorHelper(selectedOptions),
|
|
2288
|
+
_step3;
|
|
2289
|
+
|
|
2290
|
+
try {
|
|
2291
|
+
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
|
2292
|
+
var _value = _step3.value;
|
|
2293
|
+
if (!(_value in existingValues)) addValue($rdf.sym(_value));
|
|
2294
|
+
}
|
|
2295
|
+
} catch (err) {
|
|
2296
|
+
_iterator3.e(err);
|
|
2297
|
+
} finally {
|
|
2298
|
+
_iterator3.f();
|
|
2299
|
+
}
|
|
2300
|
+
|
|
2301
|
+
kb.updater.update(ds, is, function (uri, ok, body) {
|
|
2302
|
+
if (!ok) return select.parentNode.appendChild((0, _error.errorMessageBlock)(dom, 'Error updating data in select: ' + body));
|
|
2303
|
+
select.refresh();
|
|
2304
|
+
if (callbackFunction) callbackFunction(ok, {
|
|
2305
|
+
widget: 'select',
|
|
2306
|
+
event: 'change'
|
|
2307
|
+
});
|
|
2308
|
+
});
|
|
2309
|
+
};
|
|
2310
|
+
|
|
2311
|
+
select.refresh = function () {
|
|
2312
|
+
select.disabled = true; // unlocked any conflict we had got into
|
|
2313
|
+
|
|
2314
|
+
var is = [];
|
|
2315
|
+
var newObject;
|
|
2316
|
+
|
|
2317
|
+
for (var _i5 = 0; _i5 < select.options.length; _i5++) {
|
|
2318
|
+
var opt = select.options[_i5];
|
|
2319
|
+
|
|
2320
|
+
if (opt.selected && opt.AJAR_mint) {
|
|
2321
|
+
// not sure if this 'if' is used because I cannot find mintClass
|
|
2322
|
+
if (options.mintClass) {
|
|
2323
|
+
var thisForm = promptForNew(dom, kb, subject, predicate, uiFrom, options.subForm, dataDoc, function (ok, body) {
|
|
2324
|
+
if (!ok) {
|
|
2325
|
+
callbackFunction(ok, body, {
|
|
2326
|
+
change: 'new'
|
|
2327
|
+
}); // @@ if ok, need some form of refresh of the select for the new thing
|
|
2328
|
+
}
|
|
2329
|
+
});
|
|
2330
|
+
select.parentNode.appendChild(thisForm);
|
|
2331
|
+
newObject = thisForm.AJAR_subject;
|
|
2332
|
+
} else {
|
|
2333
|
+
newObject = newThing(dataDoc);
|
|
2334
|
+
}
|
|
2335
|
+
|
|
2336
|
+
is.push($rdf.st(subject, predicate, kb.sym(newObject), dataDoc));
|
|
2337
|
+
if (uiFrom) is.push($rdf.st(newObject, ns.rdf('type'), kb.sym(uiFrom), dataDoc)); // not sure if this 'if' is used because I cannot find mintStatementsFun
|
|
2338
|
+
|
|
2339
|
+
if (options.mintStatementsFun) {
|
|
2340
|
+
is = is.concat(options.mintStatementsFun(newObject));
|
|
2341
|
+
}
|
|
2342
|
+
|
|
2343
|
+
select.currentURI = newObject;
|
|
2344
|
+
}
|
|
2345
|
+
|
|
2346
|
+
if (!opt.AJAR_uri) continue; // a prompt or mint
|
|
2347
|
+
|
|
2348
|
+
if (opt.selected && containsObject(opt.AJAR_uri, selectedOptions)) {
|
|
2349
|
+
select.currentURI = opt.AJAR_uri;
|
|
2350
|
+
}
|
|
2351
|
+
|
|
2352
|
+
if (!containsObject(opt.AJAR_uri, selectedOptions)) opt.removeAttribute('selected');
|
|
2353
|
+
if (containsObject(opt.AJAR_uri, selectedOptions)) opt.setAttribute('selected', 'true');
|
|
2354
|
+
}
|
|
2355
|
+
|
|
2356
|
+
log.info('selectForOptions: data doc = ' + dataDoc);
|
|
2357
|
+
|
|
2358
|
+
if (select.currentURI && options.subForm && !options.multiSelect) {
|
|
2359
|
+
addSubFormChoice(dom, container, {}, $rdf.sym(select.currentURI), options.subForm, dataDoc, function (ok, body) {
|
|
2360
|
+
if (ok) {
|
|
2361
|
+
kb.updater.update([], is, function (uri, success, errorBody) {
|
|
2362
|
+
if (!success) container.appendChild((0, _error.errorMessageBlock)(dom, 'Error updating select: ' + errorBody));
|
|
2363
|
+
});
|
|
2364
|
+
if (callbackFunction) callbackFunction(ok, {
|
|
2365
|
+
widget: 'select',
|
|
2366
|
+
event: 'new'
|
|
2367
|
+
});
|
|
2368
|
+
} else {
|
|
2369
|
+
container.appendChild((0, _error.errorMessageBlock)(dom, 'Error updating data in field of select: ' + body));
|
|
2370
|
+
}
|
|
2371
|
+
});
|
|
2372
|
+
}
|
|
2373
|
+
|
|
2374
|
+
select.disabled = false;
|
|
2375
|
+
};
|
|
2376
|
+
|
|
2377
|
+
function createOption(uri) {
|
|
2378
|
+
var option = dom.createElement('option');
|
|
2379
|
+
var c = kb.sym(uri);
|
|
2380
|
+
var label;
|
|
2381
|
+
|
|
2382
|
+
if (options.disambiguate) {
|
|
2383
|
+
label = utils.labelWithOntology(c, true); // Init. cap
|
|
2384
|
+
} else {
|
|
2385
|
+
label = utils.label(c, true);
|
|
2386
|
+
}
|
|
2387
|
+
|
|
2388
|
+
option.appendChild(dom.createTextNode(label)); // Init.
|
|
2389
|
+
|
|
2390
|
+
option.setAttribute('value', uri);
|
|
2391
|
+
var backgroundColor = kb.any(c, kb.sym('http://www.w3.org/ns/ui#backgroundColor'));
|
|
2392
|
+
|
|
2393
|
+
if (backgroundColor) {
|
|
2394
|
+
option.setAttribute('style', 'background-color: ' + backgroundColor.value + '; ');
|
|
2395
|
+
}
|
|
2396
|
+
|
|
2397
|
+
option.AJAR_uri = uri;
|
|
2398
|
+
|
|
2399
|
+
if (containsObject(c.value, selectedOptions)) {
|
|
2400
|
+
option.setAttribute('selected', 'true');
|
|
2401
|
+
}
|
|
2402
|
+
|
|
2403
|
+
return option;
|
|
2404
|
+
}
|
|
2405
|
+
|
|
2406
|
+
if (editable) {
|
|
2407
|
+
select.addEventListener('change', onChange, false);
|
|
2408
|
+
}
|
|
2409
|
+
|
|
2410
|
+
return select;
|
|
2411
|
+
} // makeSelectForChoice
|
|
2412
|
+
|
|
2413
|
+
|
|
2414
|
+
function containsObject(obj, list) {
|
|
2415
|
+
var i;
|
|
2416
|
+
|
|
2417
|
+
for (i = 0; i < list.length; i++) {
|
|
2418
|
+
if (list[i] === obj) {
|
|
2419
|
+
return true;
|
|
2420
|
+
}
|
|
2421
|
+
}
|
|
2422
|
+
|
|
2423
|
+
return false;
|
|
2424
|
+
} // This functions replaces the findMembersNT (thisClass) from rdflib until we fix: https://github.com/linkeddata/rdflib.js/issues/565
|
|
2425
|
+
|
|
2426
|
+
/**
|
|
2427
|
+
* For anything which has thisClass (or any subclass) as its type,
|
|
2428
|
+
* or is the object of something which has thisClass (or any subclass) as its range,
|
|
2429
|
+
* or subject of something which has thisClass (or any subclass) as its domain
|
|
2430
|
+
* We don't bother doing subproperty (yet?) as it doesn't seem to be used
|
|
2431
|
+
* much.
|
|
2432
|
+
* Get all the Classes of which we can RDFS-infer the subject is a member
|
|
2433
|
+
* @return a hash of URIs
|
|
2434
|
+
*/
|
|
2435
|
+
|
|
2436
|
+
|
|
2437
|
+
function findMembersNT(store, thisClass, quad) {
|
|
2438
|
+
var len2;
|
|
2439
|
+
var len4;
|
|
2440
|
+
var m;
|
|
2441
|
+
var pred;
|
|
2442
|
+
var ref1;
|
|
2443
|
+
var ref2;
|
|
2444
|
+
var ref3;
|
|
2445
|
+
var ref4;
|
|
2446
|
+
var ref5;
|
|
2447
|
+
var st;
|
|
2448
|
+
var u;
|
|
2449
|
+
var seeds = {};
|
|
2450
|
+
seeds[thisClass.toNT()] = true;
|
|
2451
|
+
var members = {};
|
|
2452
|
+
var ref = store.transitiveClosure(seeds, store.rdfFactory.namedNode('http://www.w3.org/2000/01/rdf-schema#subClassOf'), true);
|
|
2453
|
+
|
|
2454
|
+
for (var t in ref) {
|
|
2455
|
+
ref1 = store.statementsMatching(null, store.rdfFactory.namedNode('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), store.fromNT(t), quad);
|
|
2456
|
+
|
|
2457
|
+
for (var i = 0, len = ref1.length; i < len; i++) {
|
|
2458
|
+
st = ref1[i];
|
|
2459
|
+
members[st.subject.toNT()] = st;
|
|
2460
|
+
}
|
|
2461
|
+
|
|
2462
|
+
ref2 = store.each(null, store.rdfFactory.namedNode('http://www.w3.org/2000/01/rdf-schema#domain'), store.fromNT(t), quad);
|
|
2463
|
+
|
|
2464
|
+
for (var l = 0, len1 = ref2.length; l < len1; l++) {
|
|
2465
|
+
pred = ref2[l];
|
|
2466
|
+
ref3 = store.statementsMatching(null, pred, null, quad);
|
|
2467
|
+
|
|
2468
|
+
for (m = 0, len2 = ref3.length; m < len2; m++) {
|
|
2469
|
+
st = ref3[m];
|
|
2470
|
+
members[st.subject.toNT()] = st;
|
|
2471
|
+
}
|
|
2472
|
+
}
|
|
2473
|
+
|
|
2474
|
+
ref4 = store.each(null, store.rdfFactory.namedNode('http://www.w3.org/2000/01/rdf-schema#range'), store.fromNT(t), quad);
|
|
2475
|
+
|
|
2476
|
+
for (var q = 0, len3 = ref4.length; q < len3; q++) {
|
|
2477
|
+
pred = ref4[q];
|
|
2478
|
+
ref5 = store.statementsMatching(null, pred, null, quad);
|
|
2479
|
+
|
|
2480
|
+
for (u = 0, len4 = ref5.length; u < len4; u++) {
|
|
2481
|
+
st = ref5[u];
|
|
2482
|
+
members[st.object.toNT()] = st;
|
|
2483
|
+
}
|
|
2484
|
+
}
|
|
2485
|
+
}
|
|
2486
|
+
|
|
2487
|
+
return members;
|
|
2488
|
+
}
|
|
1945
2489
|
//# sourceMappingURL=forms.js.map
|