solid-ui 2.4.22-8153a5dc → 2.4.22-8227c45e
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/README.md +23 -58
- package/dist/main.js +7239 -6575
- package/dist/main.js.map +1 -1
- package/lib/acl/access-controller.js.map +1 -1
- package/lib/acl/access-groups.js.map +1 -1
- package/lib/acl/acl-control.js.map +1 -1
- package/lib/acl/acl.js.map +1 -1
- package/lib/acl/add-agent-buttons.js +0 -1
- package/lib/acl/add-agent-buttons.js.map +1 -1
- package/lib/acl/index.js.map +1 -1
- package/lib/acl/styles.js.map +1 -1
- 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.map +1 -1
- package/lib/chat/dateFolder.js.map +1 -1
- package/lib/chat/infinite.js.map +1 -1
- package/lib/chat/message.js.map +1 -1
- package/lib/chat/messageTools.js.map +1 -1
- package/lib/chat/thread.js.map +1 -1
- package/lib/create/create.js.map +1 -1
- package/lib/create/index.js.map +1 -1
- package/lib/create/types.js.map +1 -1
- package/lib/debug.js.map +1 -1
- package/lib/folders.js.map +1 -1
- package/lib/footer/index.js.map +1 -1
- package/lib/footer/styleMap.js.map +1 -1
- package/lib/header/empty-profile.js.map +1 -1
- package/lib/header/index.js.map +1 -1
- package/lib/header/styleMap.js.map +1 -1
- package/lib/iconBase.js +3 -2
- package/lib/iconBase.js.map +1 -1
- package/lib/icons/solid_logo.js.map +1 -1
- package/lib/index.js.map +1 -1
- package/lib/jss/index.js.map +1 -1
- 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 +290 -342
- package/lib/login/login.js.map +1 -1
- package/lib/matrix/index.js.map +1 -1
- package/lib/matrix/matrix.js.map +1 -1
- package/lib/matrix/types.js.map +1 -1
- package/lib/media/index.js.map +1 -1
- package/lib/media/media-capture.js.map +1 -1
- package/lib/messageArea.js.map +1 -1
- package/lib/noun_Camera_1618446_000000.js.map +1 -1
- package/lib/ns.js.map +1 -1
- package/lib/pad.js.map +1 -1
- package/lib/participation.js.map +1 -1
- package/lib/preferences.js.map +1 -1
- package/lib/signup/config-default.js.map +1 -1
- package/lib/signup/signup.js.map +1 -1
- package/lib/stories/decorators.js.map +1 -1
- 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.map +1 -1
- package/lib/tabs.d.ts +1 -1
- package/lib/tabs.d.ts.map +1 -1
- package/lib/tabs.js +34 -21
- package/lib/tabs.js.map +1 -1
- package/lib/typings.d.js.map +1 -1
- package/lib/utils/headerFooterHelpers.js.map +1 -1
- package/lib/utils/index.js.map +1 -1
- 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.js +14 -14
- package/lib/versionInfo.js.map +1 -1
- package/lib/widgets/buttons/iconLinks.js.map +1 -1
- package/lib/widgets/buttons.d.ts.map +1 -1
- package/lib/widgets/buttons.js +2 -0
- package/lib/widgets/buttons.js.map +1 -1
- 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.js.map +1 -1
- package/lib/widgets/forms/autocomplete/autocompleteField.js.map +1 -1
- package/lib/widgets/forms/autocomplete/autocompletePicker.js.map +1 -1
- package/lib/widgets/forms/autocomplete/language.js.map +1 -1
- package/lib/widgets/forms/autocomplete/publicData.js.map +1 -1
- package/lib/widgets/forms/basic.js.map +1 -1
- package/lib/widgets/forms/comment.js.map +1 -1
- package/lib/widgets/forms/fieldFunction.js.map +1 -1
- package/lib/widgets/forms/fieldParams.js.map +1 -1
- package/lib/widgets/forms/formStyle.js.map +1 -1
- package/lib/widgets/forms.js +452 -161
- package/lib/widgets/forms.js.map +1 -1
- 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.map +1 -1
- package/lib/widgets/widgetHelpers.js.map +1 -1
- package/package.json +13 -8
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,15 @@ exports.findClosest = findClosest;
|
|
|
44
50
|
exports.formsFor = formsFor;
|
|
45
51
|
exports.makeDescription = makeDescription;
|
|
46
52
|
exports.makeSelectForCategory = makeSelectForCategory;
|
|
53
|
+
exports.makeSelectForChoice = makeSelectForChoice;
|
|
47
54
|
exports.makeSelectForNestedCategory = makeSelectForNestedCategory;
|
|
48
55
|
exports.makeSelectForOptions = makeSelectForOptions;
|
|
56
|
+
Object.defineProperty(exports, "mostSpecificClassURI", {
|
|
57
|
+
enumerable: true,
|
|
58
|
+
get: function get() {
|
|
59
|
+
return _fieldFunction.mostSpecificClassURI;
|
|
60
|
+
}
|
|
61
|
+
});
|
|
49
62
|
exports.newButton = newButton;
|
|
50
63
|
exports.newThing = newThing;
|
|
51
64
|
exports.promptForNew = promptForNew;
|
|
@@ -93,6 +106,8 @@ var _solidLogic = require("solid-logic");
|
|
|
93
106
|
|
|
94
107
|
var utils = _interopRequireWildcard(require("../utils"));
|
|
95
108
|
|
|
109
|
+
var _multiSelect = require("./multiSelect");
|
|
110
|
+
|
|
96
111
|
var widgets = _interopRequireWildcard(require("../widgets"));
|
|
97
112
|
|
|
98
113
|
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,14 +170,16 @@ _fieldFunction.field[ns.ui('Form').uri] = _fieldFunction.field[ns.ui('Group').ur
|
|
|
155
170
|
var ui = ns.ui;
|
|
156
171
|
if (container) container.appendChild(box); // Prevent loops
|
|
157
172
|
|
|
173
|
+
if (!form) return;
|
|
158
174
|
var key = subject.toNT() + '|' + form.toNT();
|
|
159
175
|
|
|
160
176
|
if (already[key]) {
|
|
161
177
|
// been there done that
|
|
162
|
-
box.appendChild(dom.createTextNode('Group: see above ' + key));
|
|
163
|
-
|
|
178
|
+
box.appendChild(dom.createTextNode('Group: see above ' + key)); // TODO fix dependency cycle to solid-panes by calling outlineManager
|
|
179
|
+
// const plist = [$rdf.st(subject, ns.owl('sameAs'), subject)] // @@ need prev subject
|
|
180
|
+
// dom.outlineManager.appendPropertyTRs(box, plist)
|
|
181
|
+
// dom.appendChild(plist)
|
|
164
182
|
|
|
165
|
-
dom.outlineManager.appendPropertyTRs(box, plist);
|
|
166
183
|
return box;
|
|
167
184
|
}
|
|
168
185
|
|
|
@@ -263,47 +280,43 @@ _fieldFunction.field[ns.ui('Options').uri] = function (dom, container, already,
|
|
|
263
280
|
values = kb.each(subject, dependingOn);
|
|
264
281
|
}
|
|
265
282
|
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
for (var i = 0; i < cases.length; i++) {
|
|
270
|
-
var c = cases[i];
|
|
271
|
-
var tests = kb.each(c, ui('for'), null, formDoc); // There can be multiple 'for'
|
|
283
|
+
for (var i = 0; i < cases.length; i++) {
|
|
284
|
+
var c = cases[i];
|
|
285
|
+
var tests = kb.each(c, ui('for'), null, formDoc); // There can be multiple 'for'
|
|
272
286
|
|
|
273
|
-
|
|
287
|
+
var match = false;
|
|
274
288
|
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
289
|
+
for (var j = 0; j < tests.length; j++) {
|
|
290
|
+
var _iterator = _createForOfIteratorHelper(values),
|
|
291
|
+
_step;
|
|
278
292
|
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
293
|
+
try {
|
|
294
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
295
|
+
var value = _step.value;
|
|
296
|
+
var test = tests[j];
|
|
283
297
|
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
}
|
|
298
|
+
if (value.sameTerm(tests) || value.termType === test.termType && value.value === test.value) {
|
|
299
|
+
match = true;
|
|
287
300
|
}
|
|
288
|
-
} catch (err) {
|
|
289
|
-
_iterator.e(err);
|
|
290
|
-
} finally {
|
|
291
|
-
_iterator.f();
|
|
292
301
|
}
|
|
302
|
+
} catch (err) {
|
|
303
|
+
_iterator.e(err);
|
|
304
|
+
} finally {
|
|
305
|
+
_iterator.f();
|
|
293
306
|
}
|
|
307
|
+
}
|
|
294
308
|
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
if (!_field3) {
|
|
299
|
-
box.appendChild((0, _error.errorMessageBlock)(dom, 'No "use" part for case in form ' + form));
|
|
300
|
-
return box;
|
|
301
|
-
} else {
|
|
302
|
-
appendForm(dom, box, already, subject, _field3, dataDoc, callbackFunction);
|
|
303
|
-
}
|
|
309
|
+
if (match) {
|
|
310
|
+
var _field3 = kb.the(c, ui('use'));
|
|
304
311
|
|
|
305
|
-
|
|
312
|
+
if (!_field3) {
|
|
313
|
+
box.appendChild((0, _error.errorMessageBlock)(dom, 'No "use" part for case in form ' + form));
|
|
314
|
+
return box;
|
|
315
|
+
} else {
|
|
316
|
+
appendForm(dom, box, already, subject, _field3, dataDoc, callbackFunction);
|
|
306
317
|
}
|
|
318
|
+
|
|
319
|
+
break;
|
|
307
320
|
}
|
|
308
321
|
} // @@ Add box.refresh() to sync fields with values
|
|
309
322
|
|
|
@@ -591,7 +604,7 @@ _fieldFunction.field[ns.ui('Multiple').uri] = function (dom, container, already,
|
|
|
591
604
|
// delete button and move buttons
|
|
592
605
|
|
|
593
606
|
if (kb.updater.editable(dataDoc.uri)) {
|
|
594
|
-
buttons.deleteButtonWithCheck(dom, subField,
|
|
607
|
+
buttons.deleteButtonWithCheck(dom, subField, multipleUIlabel, deleteThisItem);
|
|
595
608
|
|
|
596
609
|
if (ordered) {
|
|
597
610
|
// Add controsl in a frame
|
|
@@ -642,7 +655,7 @@ _fieldFunction.field[ns.ui('Multiple').uri] = function (dom, container, already,
|
|
|
642
655
|
|
|
643
656
|
var _shim = dom.createElement('div');
|
|
644
657
|
|
|
645
|
-
_shim.appendChild(subField); // Subfield has its own
|
|
658
|
+
_shim.appendChild(subField); // Subfield has its own layout
|
|
646
659
|
|
|
647
660
|
|
|
648
661
|
frame.appendChild(_shim);
|
|
@@ -691,6 +704,8 @@ _fieldFunction.field[ns.ui('Multiple').uri] = function (dom, container, already,
|
|
|
691
704
|
return shim;
|
|
692
705
|
}
|
|
693
706
|
|
|
707
|
+
var multipleUIlabel = kb.any(form, ui('label'));
|
|
708
|
+
if (!multipleUIlabel) multipleUIlabel = utils.label(property);
|
|
694
709
|
var min = kb.any(form, ui('min')); // This is the minimum number -- default 0
|
|
695
710
|
|
|
696
711
|
min = min ? 0 + min.value : 0;
|
|
@@ -731,10 +746,9 @@ _fieldFunction.field[ns.ui('Multiple').uri] = function (dom, container, already,
|
|
|
731
746
|
img.setAttribute('src', plusIconURI); // plus sign
|
|
732
747
|
|
|
733
748
|
img.setAttribute('style', 'margin: 0.2em; width: 1.5em; height:1.5em');
|
|
734
|
-
img.title = 'Click to add
|
|
735
|
-
var prompt =
|
|
736
|
-
prompt.textContent = (values.length === 0 ? 'Add
|
|
737
|
-
|
|
749
|
+
img.title = 'Click to add another ' + multipleUIlabel;
|
|
750
|
+
var prompt = dom.createElement('span');
|
|
751
|
+
prompt.textContent = (values.length === 0 ? 'Add another ' : 'Add ') + multipleUIlabel;
|
|
738
752
|
tail.addEventListener('click', /*#__PURE__*/function () {
|
|
739
753
|
var _ref3 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee5(_eventNotUsed) {
|
|
740
754
|
return _regenerator["default"].wrap(function _callee5$(_context5) {
|
|
@@ -756,6 +770,7 @@ _fieldFunction.field[ns.ui('Multiple').uri] = function (dom, container, already,
|
|
|
756
770
|
return _ref3.apply(this, arguments);
|
|
757
771
|
};
|
|
758
772
|
}(), true);
|
|
773
|
+
tail.appendChild(prompt);
|
|
759
774
|
}
|
|
760
775
|
|
|
761
776
|
function createListIfNecessary() {
|
|
@@ -1017,28 +1032,38 @@ _fieldFunction.field[ns.ui('Classifier').uri] = function (dom, container, alread
|
|
|
1017
1032
|
**
|
|
1018
1033
|
** Not nested. Generates a link to something from a given class.
|
|
1019
1034
|
** Optional subform for the thing selected.
|
|
1035
|
+
** Generates a subForm based on a ui:use form
|
|
1036
|
+
** Will look like:
|
|
1037
|
+
** <div id=dropDownDiv>
|
|
1038
|
+
** <div id=labelOfDropDown>
|
|
1039
|
+
** <div id=selectDiv>
|
|
1040
|
+
** <select id=dropDownSelect>
|
|
1041
|
+
** <option> ....
|
|
1042
|
+
** <subForm>
|
|
1020
1043
|
** Alternative implementatons caould be:
|
|
1021
1044
|
** -- pop-up menu (as here)
|
|
1022
1045
|
** -- radio buttons
|
|
1023
1046
|
** -- auto-complete typing
|
|
1024
1047
|
**
|
|
1025
|
-
**
|
|
1048
|
+
** TODO: according to ontology ui:choice can also have ns.ui('default') - this is not implemented yet
|
|
1026
1049
|
*/
|
|
1027
1050
|
|
|
1028
1051
|
|
|
1029
1052
|
_fieldFunction.field[ns.ui('Choice').uri] = function (dom, container, already, subject, form, dataDoc, callbackFunction) {
|
|
1030
1053
|
var ui = ns.ui;
|
|
1031
1054
|
var kb = _solidLogic.store;
|
|
1032
|
-
var multiple = false;
|
|
1033
1055
|
var formDoc = form.doc ? form.doc() : null; // @@ if blank no way to know
|
|
1034
1056
|
|
|
1035
1057
|
var p;
|
|
1036
|
-
var box = dom.createElement('div');
|
|
1058
|
+
var box = dom.createElement('div');
|
|
1059
|
+
box.setAttribute('class', 'choiceBox'); // Set flexDirection column?
|
|
1037
1060
|
|
|
1038
1061
|
if (container) container.appendChild(box);
|
|
1039
1062
|
var lhs = dom.createElement('div');
|
|
1063
|
+
lhs.setAttribute('class', 'formFieldName choiceBox-label');
|
|
1040
1064
|
box.appendChild(lhs);
|
|
1041
1065
|
var rhs = dom.createElement('div');
|
|
1066
|
+
rhs.setAttribute('class', 'formFieldValue choiceBox-selectBox');
|
|
1042
1067
|
box.appendChild(rhs);
|
|
1043
1068
|
var property = kb.any(form, ui('property'));
|
|
1044
1069
|
|
|
@@ -1047,87 +1072,153 @@ _fieldFunction.field[ns.ui('Choice').uri] = function (dom, container, already, s
|
|
|
1047
1072
|
}
|
|
1048
1073
|
|
|
1049
1074
|
lhs.appendChild((0, _basic.fieldLabel)(dom, property, form));
|
|
1050
|
-
var
|
|
1075
|
+
var uiFrom = kb.any(form, ui('from'));
|
|
1051
1076
|
|
|
1052
|
-
if (!
|
|
1077
|
+
if (!uiFrom) {
|
|
1053
1078
|
return (0, _error.errorMessageBlock)(dom, "No 'from' for Choice: " + form);
|
|
1054
1079
|
}
|
|
1055
1080
|
|
|
1056
1081
|
var subForm = kb.any(form, ui('use')); // Optional
|
|
1082
|
+
// const follow = kb.anyJS(form, ui('follow'), null, formDoc) // data doc moves to new subject?
|
|
1057
1083
|
|
|
1058
|
-
var follow = kb.anyJS(form, ui('follow'), null, formDoc); // data doc moves to new subject?
|
|
1059
|
-
|
|
1060
|
-
var possible = [];
|
|
1061
|
-
var possibleProperties;
|
|
1062
|
-
var nullLabel = '--' + utils.label(property) + '-?';
|
|
1063
1084
|
var opts = {
|
|
1064
1085
|
form: form,
|
|
1065
|
-
|
|
1066
|
-
nullLabel: nullLabel,
|
|
1086
|
+
subForm: subForm,
|
|
1067
1087
|
disambiguate: false
|
|
1068
1088
|
};
|
|
1069
|
-
possible = kb.each(undefined, ns.rdf('type'), from, formDoc);
|
|
1070
1089
|
|
|
1071
|
-
|
|
1072
|
-
possible
|
|
1073
|
-
|
|
1090
|
+
function getSelectorOptions() {
|
|
1091
|
+
var possible = [];
|
|
1092
|
+
var possibleProperties;
|
|
1093
|
+
possible = kb.each(undefined, ns.rdf('type'), uiFrom, formDoc);
|
|
1074
1094
|
|
|
1095
|
+
for (var x in kb.findMembersNT(uiFrom)) {
|
|
1096
|
+
possible.push(kb.fromNT(x));
|
|
1097
|
+
} // Use rdfs
|
|
1075
1098
|
|
|
1076
|
-
if (from.sameTerm(ns.rdfs('Class'))) {
|
|
1077
|
-
for (p in buttons.allClassURIs()) {
|
|
1078
|
-
possible.push(kb.sym(p));
|
|
1079
|
-
} // log.debug("%%% Choice field: possible.length 2 = "+possible.length)
|
|
1080
1099
|
|
|
1081
|
-
|
|
1082
|
-
|
|
1100
|
+
if (uiFrom.sameTerm(ns.rdfs('Class'))) {
|
|
1101
|
+
for (p in buttons.allClassURIs()) {
|
|
1102
|
+
possible.push(kb.sym(p));
|
|
1103
|
+
} // log.debug("%%% Choice field: possible.length 2 = "+possible.length)
|
|
1083
1104
|
|
|
1084
|
-
|
|
1085
|
-
|
|
1086
|
-
}
|
|
1105
|
+
} else if (uiFrom.sameTerm(ns.rdf('Property'))) {
|
|
1106
|
+
possibleProperties = buttons.propertyTriage(kb);
|
|
1087
1107
|
|
|
1088
|
-
|
|
1089
|
-
|
|
1090
|
-
|
|
1108
|
+
for (p in possibleProperties.op) {
|
|
1109
|
+
possible.push(kb.fromNT(p));
|
|
1110
|
+
}
|
|
1111
|
+
|
|
1112
|
+
for (p in possibleProperties.dp) {
|
|
1113
|
+
possible.push(kb.fromNT(p));
|
|
1114
|
+
}
|
|
1091
1115
|
|
|
1092
|
-
|
|
1093
|
-
|
|
1094
|
-
|
|
1116
|
+
opts.disambiguate = true; // This is a big class, and the labels won't be enough.
|
|
1117
|
+
} else if (uiFrom.sameTerm(ns.owl('ObjectProperty'))) {
|
|
1118
|
+
possibleProperties = buttons.propertyTriage(kb);
|
|
1095
1119
|
|
|
1096
|
-
|
|
1097
|
-
|
|
1098
|
-
|
|
1120
|
+
for (p in possibleProperties.op) {
|
|
1121
|
+
possible.push(kb.fromNT(p));
|
|
1122
|
+
}
|
|
1123
|
+
|
|
1124
|
+
opts.disambiguate = true;
|
|
1125
|
+
} else if (uiFrom.sameTerm(ns.owl('DatatypeProperty'))) {
|
|
1126
|
+
possibleProperties = buttons.propertyTriage(kb);
|
|
1099
1127
|
|
|
1100
|
-
|
|
1101
|
-
|
|
1102
|
-
|
|
1128
|
+
for (p in possibleProperties.dp) {
|
|
1129
|
+
possible.push(kb.fromNT(p));
|
|
1130
|
+
}
|
|
1103
1131
|
|
|
1104
|
-
|
|
1105
|
-
possible.push(kb.fromNT(p));
|
|
1132
|
+
opts.disambiguate = true;
|
|
1106
1133
|
}
|
|
1107
1134
|
|
|
1108
|
-
|
|
1109
|
-
}
|
|
1135
|
+
return possible; // return sortByLabel(possible)
|
|
1136
|
+
} // TODO: this checks for any occurrence, regardless of true or false setting
|
|
1110
1137
|
|
|
1111
|
-
var object = kb.any(subject, property);
|
|
1112
1138
|
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
(0, _fieldFunction.fieldFunction)(dom, subForm)(dom, rhs, already, object, subForm, follow ? object.doc() : dataDoc, callbackFunction);
|
|
1139
|
+
if (kb.any(form, ui('canMintNew'))) {
|
|
1140
|
+
opts.mint = '* Create new *'; // @@ could be better
|
|
1116
1141
|
}
|
|
1117
1142
|
|
|
1118
|
-
var
|
|
1143
|
+
var multiSelect = kb.any(form, ui('multiselect')); // Optional
|
|
1144
|
+
|
|
1145
|
+
if (multiSelect) opts.multiSelect = true;
|
|
1146
|
+
var selector;
|
|
1147
|
+
|
|
1148
|
+
rhs.refresh = function () {
|
|
1149
|
+
// from ui:property
|
|
1150
|
+
var selectedOptions = kb.each(subject, property, null, dataDoc).map(function (object) {
|
|
1151
|
+
return object.value;
|
|
1152
|
+
}); // from ui:from + ui:property
|
|
1153
|
+
|
|
1154
|
+
var possibleOptions = getSelectorOptions();
|
|
1155
|
+
possibleOptions.push(selectedOptions);
|
|
1156
|
+
possibleOptions = sortByLabel(possibleOptions);
|
|
1157
|
+
selector = makeSelectForChoice(dom, rhs, kb, subject, property, possibleOptions, selectedOptions, uiFrom, opts, dataDoc, callbackFunction);
|
|
1158
|
+
rhs.innerHTML = '';
|
|
1159
|
+
rhs.appendChild(selector);
|
|
1160
|
+
|
|
1161
|
+
if (multiSelect) {
|
|
1162
|
+
var multiSelectDiv = new _multiSelect.IconicMultiSelect({
|
|
1163
|
+
placeholder: selector.selected,
|
|
1164
|
+
select: selector,
|
|
1165
|
+
container: rhs,
|
|
1166
|
+
textField: 'textField',
|
|
1167
|
+
valueField: 'valueField'
|
|
1168
|
+
});
|
|
1169
|
+
multiSelectDiv.init();
|
|
1170
|
+
multiSelectDiv.subscribe(function (event) {
|
|
1171
|
+
if (event.action === 'REMOVE_OPTION') {
|
|
1172
|
+
selectedOptions = selectedOptions.filter(function (value) {
|
|
1173
|
+
return value !== event.value;
|
|
1174
|
+
});
|
|
1175
|
+
}
|
|
1119
1176
|
|
|
1120
|
-
|
|
1121
|
-
|
|
1177
|
+
if (event.action === 'CLEAR_ALL_OPTIONS') {
|
|
1178
|
+
selectedOptions = [];
|
|
1179
|
+
}
|
|
1122
1180
|
|
|
1123
|
-
|
|
1124
|
-
|
|
1181
|
+
if (event.action === 'ADD_OPTION') {
|
|
1182
|
+
var stringValue = event.value + '';
|
|
1183
|
+
|
|
1184
|
+
if (stringValue.includes('Create new')) {
|
|
1185
|
+
var newObject = newThing(dataDoc);
|
|
1186
|
+
var is = [];
|
|
1187
|
+
is.push($rdf.st(subject, property, kb.sym(newObject), dataDoc));
|
|
1188
|
+
if (uiFrom) is.push($rdf.st(newObject, ns.rdf('type'), kb.sym(uiFrom), dataDoc));
|
|
1189
|
+
|
|
1190
|
+
if (subForm) {
|
|
1191
|
+
addSubFormChoice(dom, rhs, {}, $rdf.sym(newObject), subForm, dataDoc, function (ok, body) {
|
|
1192
|
+
if (ok) {
|
|
1193
|
+
kb.updater.update([], is, function (uri, success, errorBody) {
|
|
1194
|
+
if (!success) rhs.appendChild((0, _error.errorMessageBlock)(dom, 'Error updating select: ' + errorBody));
|
|
1195
|
+
});
|
|
1196
|
+
selectedOptions.push(newObject);
|
|
1197
|
+
if (callbackFunction) callbackFunction(ok, {
|
|
1198
|
+
widget: 'select',
|
|
1199
|
+
event: 'new'
|
|
1200
|
+
});
|
|
1201
|
+
} else {
|
|
1202
|
+
rhs.appendChild((0, _error.errorMessageBlock)(dom, 'Error updating data in field of select: ' + body));
|
|
1203
|
+
}
|
|
1204
|
+
});
|
|
1205
|
+
}
|
|
1206
|
+
} else selectedOptions.push(event.value);
|
|
1207
|
+
}
|
|
1208
|
+
|
|
1209
|
+
selector.update(selectedOptions);
|
|
1210
|
+
});
|
|
1211
|
+
}
|
|
1212
|
+
};
|
|
1125
1213
|
|
|
1126
|
-
|
|
1127
|
-
|
|
1128
|
-
if (object && subForm) addSubForm();
|
|
1214
|
+
rhs.refresh();
|
|
1215
|
+
if (selector && selector.refresh) selector.refresh();
|
|
1129
1216
|
return box;
|
|
1130
|
-
};
|
|
1217
|
+
};
|
|
1218
|
+
|
|
1219
|
+
function addSubFormChoice(dom, selectDiv, already, subject, subForm, dataDoc, callbackFunction) {
|
|
1220
|
+
(0, _fieldFunction.fieldFunction)(dom, subForm)(dom, selectDiv, already, subject, subForm, dataDoc, callbackFunction);
|
|
1221
|
+
} // Documentation - non-interactive fields
|
|
1131
1222
|
//
|
|
1132
1223
|
|
|
1133
1224
|
|
|
@@ -1330,7 +1421,8 @@ function promptForNew(dom, kb, subject, predicate, theClass, form, dataDoc, call
|
|
|
1330
1421
|
b.setAttribute('type', 'button');
|
|
1331
1422
|
b.setAttribute('style', 'float: right;');
|
|
1332
1423
|
b.innerHTML = 'Goto ' + utils.label(theClass);
|
|
1333
|
-
b.addEventListener('click',
|
|
1424
|
+
b.addEventListener('click', // TODO fix dependency cycle to solid-panes by calling outlineManager
|
|
1425
|
+
function (_e) {
|
|
1334
1426
|
dom.outlineManager.GotoSubject(theClass, true, undefined, true, undefined);
|
|
1335
1427
|
}, false);
|
|
1336
1428
|
return box;
|
|
@@ -1465,10 +1557,8 @@ function makeDescription(dom, kb, subject, predicate, dataDoc, callbackFunction)
|
|
|
1465
1557
|
// @param subject - a term, the subject of the statement(s) being edited.
|
|
1466
1558
|
// @param predicate - a term, the predicate of the statement(s) being edited
|
|
1467
1559
|
// @param possible - a list of terms, the possible value the object can take
|
|
1468
|
-
// @param options.multiple - Boolean - Whether more than one at a time is allowed
|
|
1469
1560
|
// @param options.nullLabel - a string to be displayed as the
|
|
1470
1561
|
// option for none selected (for non multiple)
|
|
1471
|
-
// @param options.mint - User may create thing if this sent to the prompt string eg "New foo"
|
|
1472
1562
|
// @param options.subForm - If mint, then the form to be used for minting the new thing
|
|
1473
1563
|
// @param dataDoc - The web document being edited
|
|
1474
1564
|
// @param callbackFunction - takes (boolean ok, string errorBody)
|
|
@@ -1492,7 +1582,7 @@ function makeSelectForOptions(dom, kb, subject, predicate, possible, options, da
|
|
|
1492
1582
|
} // uris is now the set of possible options
|
|
1493
1583
|
|
|
1494
1584
|
|
|
1495
|
-
if (n === 0
|
|
1585
|
+
if (n === 0) {
|
|
1496
1586
|
return (0, _error.errorMessageBlock)(dom, "Can't do selector with no options, subject= " + subject + ' property = ' + predicate + '.');
|
|
1497
1587
|
}
|
|
1498
1588
|
|
|
@@ -1506,7 +1596,9 @@ function makeSelectForOptions(dom, kb, subject, predicate, possible, options, da
|
|
|
1506
1596
|
actual = kb.findTypeURIs(subject);
|
|
1507
1597
|
} else {
|
|
1508
1598
|
kb.each(subject, predicate, null, dataDoc).forEach(function (x) {
|
|
1509
|
-
|
|
1599
|
+
if (x.uri) {
|
|
1600
|
+
actual[x.uri] = true;
|
|
1601
|
+
}
|
|
1510
1602
|
});
|
|
1511
1603
|
}
|
|
1512
1604
|
|
|
@@ -1527,33 +1619,8 @@ function makeSelectForOptions(dom, kb, subject, predicate, possible, options, da
|
|
|
1527
1619
|
}
|
|
1528
1620
|
};
|
|
1529
1621
|
|
|
1530
|
-
var newObject;
|
|
1531
|
-
|
|
1532
1622
|
for (var _i = 0; _i < select.options.length; _i++) {
|
|
1533
1623
|
var opt = select.options[_i];
|
|
1534
|
-
|
|
1535
|
-
if (opt.selected && opt.AJAR_mint) {
|
|
1536
|
-
if (options.mintClass) {
|
|
1537
|
-
var thisForm = promptForNew(dom, kb, subject, predicate, options.mintClass, null, dataDoc, function (ok, body) {
|
|
1538
|
-
if (!ok) {
|
|
1539
|
-
callbackFunction(ok, body, {
|
|
1540
|
-
change: 'new'
|
|
1541
|
-
}); // @@ if ok, need some form of refresh of the select for the new thing
|
|
1542
|
-
}
|
|
1543
|
-
});
|
|
1544
|
-
select.parentNode.appendChild(thisForm);
|
|
1545
|
-
newObject = thisForm.AJAR_subject;
|
|
1546
|
-
} else {
|
|
1547
|
-
newObject = newThing(dataDoc);
|
|
1548
|
-
}
|
|
1549
|
-
|
|
1550
|
-
is.push($rdf.st(subject, predicate, newObject, dataDoc));
|
|
1551
|
-
|
|
1552
|
-
if (options.mintStatementsFun) {
|
|
1553
|
-
is = is.concat(options.mintStatementsFun(newObject));
|
|
1554
|
-
}
|
|
1555
|
-
}
|
|
1556
|
-
|
|
1557
1624
|
if (!opt.AJAR_uri) continue; // a prompt or mint
|
|
1558
1625
|
|
|
1559
1626
|
if (opt.selected && !(opt.AJAR_uri in actual)) {
|
|
@@ -1583,24 +1650,12 @@ function makeSelectForOptions(dom, kb, subject, predicate, possible, options, da
|
|
|
1583
1650
|
sel = sel.superSelect;
|
|
1584
1651
|
}
|
|
1585
1652
|
|
|
1586
|
-
function doneNew(ok, _body) {
|
|
1587
|
-
callbackFunction(ok, {
|
|
1588
|
-
widget: 'select',
|
|
1589
|
-
event: 'new'
|
|
1590
|
-
});
|
|
1591
|
-
}
|
|
1592
|
-
|
|
1593
1653
|
log.info('selectForOptions: data doc = ' + dataDoc);
|
|
1594
1654
|
kb.updater.update(ds, is, function (uri, ok, body) {
|
|
1595
1655
|
actual = getActual(); // refresh
|
|
1596
1656
|
|
|
1597
1657
|
if (ok) {
|
|
1598
1658
|
select.disabled = false; // data written back
|
|
1599
|
-
|
|
1600
|
-
if (newObject) {
|
|
1601
|
-
var fn = (0, _fieldFunction.fieldFunction)(dom, options.subForm);
|
|
1602
|
-
fn(dom, select.parentNode, {}, newObject, options.subForm, dataDoc, doneNew);
|
|
1603
|
-
}
|
|
1604
1659
|
} else {
|
|
1605
1660
|
return select.parentNode.appendChild((0, _error.errorMessageBlock)(dom, 'Error updating data in select: ' + body));
|
|
1606
1661
|
}
|
|
@@ -1614,7 +1669,6 @@ function makeSelectForOptions(dom, kb, subject, predicate, possible, options, da
|
|
|
1614
1669
|
|
|
1615
1670
|
var select = dom.createElement('select');
|
|
1616
1671
|
select.setAttribute('style', style.formSelectSTyle);
|
|
1617
|
-
if (options.multiple) select.setAttribute('multiple', 'true');
|
|
1618
1672
|
select.currentURI = null;
|
|
1619
1673
|
|
|
1620
1674
|
select.refresh = function () {
|
|
@@ -1657,15 +1711,7 @@ function makeSelectForOptions(dom, kb, subject, predicate, possible, options, da
|
|
|
1657
1711
|
select.appendChild(option);
|
|
1658
1712
|
}
|
|
1659
1713
|
|
|
1660
|
-
if (
|
|
1661
|
-
var mint = dom.createElement('option');
|
|
1662
|
-
mint.appendChild(dom.createTextNode(options.mint));
|
|
1663
|
-
mint.AJAR_mint = true; // Flag it
|
|
1664
|
-
|
|
1665
|
-
select.insertBefore(mint, select.firstChild);
|
|
1666
|
-
}
|
|
1667
|
-
|
|
1668
|
-
if (select.currentURI == null && !options.multiple) {
|
|
1714
|
+
if (!select.currentURI) {
|
|
1669
1715
|
var prompt = dom.createElement('option');
|
|
1670
1716
|
prompt.appendChild(dom.createTextNode(options.nullLabel));
|
|
1671
1717
|
select.insertBefore(prompt, select.firstChild);
|
|
@@ -1688,28 +1734,16 @@ function makeSelectForOptions(dom, kb, subject, predicate, possible, options, da
|
|
|
1688
1734
|
function makeSelectForCategory(dom, kb, subject, category, dataDoc, callbackFunction) {
|
|
1689
1735
|
var du = kb.any(category, ns.owl('disjointUnionOf'));
|
|
1690
1736
|
var subs;
|
|
1691
|
-
var multiple = false;
|
|
1692
1737
|
|
|
1693
1738
|
if (!du) {
|
|
1694
1739
|
subs = kb.each(undefined, ns.rdfs('subClassOf'), category);
|
|
1695
|
-
multiple = true;
|
|
1696
1740
|
} else {
|
|
1697
1741
|
subs = du.elements;
|
|
1698
1742
|
}
|
|
1699
1743
|
|
|
1700
1744
|
log.debug('Select list length ' + subs.length);
|
|
1701
|
-
|
|
1702
|
-
if (subs.length === 0) {
|
|
1703
|
-
return (0, _error.errorMessageBlock)(dom, "Can't do " + (multiple ? 'multiple ' : '') + 'selector with no subclasses of category: ' + category);
|
|
1704
|
-
}
|
|
1705
|
-
|
|
1706
|
-
if (subs.length === 1) {
|
|
1707
|
-
return (0, _error.errorMessageBlock)(dom, "Can't do " + (multiple ? 'multiple ' : '') + 'selector with only 1 subclass of category: ' + category + ':' + subs[1]);
|
|
1708
|
-
}
|
|
1709
|
-
|
|
1710
1745
|
return makeSelectForOptions(dom, kb, subject, ns.rdf('type'), subs, {
|
|
1711
|
-
|
|
1712
|
-
nullPrompt: '--classify--'
|
|
1746
|
+
nullLabel: '* Select type *'
|
|
1713
1747
|
}, dataDoc, callbackFunction);
|
|
1714
1748
|
}
|
|
1715
1749
|
/** Make SELECT element to select subclasses recurively
|
|
@@ -1743,8 +1777,7 @@ function makeSelectForNestedCategory(dom, kb, subject, category, dataDoc, callba
|
|
|
1743
1777
|
function onChange(ok, body) {
|
|
1744
1778
|
if (ok) update();
|
|
1745
1779
|
callbackFunction(ok, body);
|
|
1746
|
-
}
|
|
1747
|
-
|
|
1780
|
+
}
|
|
1748
1781
|
|
|
1749
1782
|
var select = makeSelectForCategory(dom, kb, subject, category, dataDoc, onChange);
|
|
1750
1783
|
container.appendChild(select);
|
|
@@ -1899,4 +1932,262 @@ function newThing(doc) {
|
|
|
1899
1932
|
var now = new Date();
|
|
1900
1933
|
return $rdf.sym(doc.uri + '#' + 'id' + ('' + now.getTime()));
|
|
1901
1934
|
}
|
|
1935
|
+
/** Make SELECT element to select options
|
|
1936
|
+
//
|
|
1937
|
+
// @param subject - a term, the subject of the statement(s) being edited.
|
|
1938
|
+
// @param predicate - a term, the predicate of the statement(s) being edited
|
|
1939
|
+
// @param possible - a list of terms, the possible value the object can take
|
|
1940
|
+
// @param options.mint - User may create thing if this sent to the prompt string eg "New foo"
|
|
1941
|
+
// @param options.subForm - If mint, then the form to be used for minting the new thing
|
|
1942
|
+
// @param dataDoc - The web document being edited
|
|
1943
|
+
// @param callbackFunction - takes (boolean ok, string errorBody)
|
|
1944
|
+
*/
|
|
1945
|
+
|
|
1946
|
+
|
|
1947
|
+
function makeSelectForChoice(dom, container, kb, subject, predicate, inputPossibleOptions, selectedOptions, uiFrom, options, dataDoc, callbackFunction) {
|
|
1948
|
+
var optionsFromClassUIfrom = {}; // Count them
|
|
1949
|
+
|
|
1950
|
+
var editable = kb.updater.editable(dataDoc.uri);
|
|
1951
|
+
|
|
1952
|
+
for (var i = 0; i < inputPossibleOptions.length; i++) {
|
|
1953
|
+
var sub = inputPossibleOptions[i]; // @@ Maybe; make this so it works with blank nodes too
|
|
1954
|
+
// if (!sub.uri) debug.warn(`makeSelectForChoice: option does not have an uri: ${sub}, with predicate: ${predicate}`)
|
|
1955
|
+
|
|
1956
|
+
if (!sub.uri || sub.uri in optionsFromClassUIfrom) continue;
|
|
1957
|
+
optionsFromClassUIfrom[sub.uri] = true;
|
|
1958
|
+
}
|
|
1959
|
+
|
|
1960
|
+
var isEmpty = Object.keys(optionsFromClassUIfrom).length === 0;
|
|
1961
|
+
|
|
1962
|
+
if (isEmpty && !options.mint) {
|
|
1963
|
+
return (0, _error.errorMessageBlock)(dom, "Can't do selector with no options, subject= " + subject + ' property = ' + predicate + '.');
|
|
1964
|
+
}
|
|
1965
|
+
|
|
1966
|
+
log.debug('makeSelectForChoice: dataDoc=' + dataDoc);
|
|
1967
|
+
|
|
1968
|
+
function createDefaultSelectOptionText() {
|
|
1969
|
+
var firstSelectOptionText = '--- choice ---';
|
|
1970
|
+
|
|
1971
|
+
if (predicate && !(predicate.termType === 'BlankNode')) {
|
|
1972
|
+
firstSelectOptionText = '* Select for property: ' + utils.label(predicate) + ' *';
|
|
1973
|
+
}
|
|
1974
|
+
|
|
1975
|
+
if (subject && !(subject.termType === 'BlankNode')) {
|
|
1976
|
+
firstSelectOptionText = '* Select for ' + utils.label(subject, true) + ' *';
|
|
1977
|
+
}
|
|
1978
|
+
|
|
1979
|
+
return firstSelectOptionText;
|
|
1980
|
+
}
|
|
1981
|
+
|
|
1982
|
+
function createDefaultSelectOption() {
|
|
1983
|
+
var option = dom.createElement('option');
|
|
1984
|
+
option.appendChild(dom.createTextNode(createDefaultSelectOptionText()));
|
|
1985
|
+
option.disabled = true;
|
|
1986
|
+
option.value = true;
|
|
1987
|
+
option.hidden = true;
|
|
1988
|
+
option.selected = true;
|
|
1989
|
+
return option;
|
|
1990
|
+
}
|
|
1991
|
+
|
|
1992
|
+
var onChange = function onChange(_e) {
|
|
1993
|
+
container.removeChild(container.lastChild);
|
|
1994
|
+
select.refresh();
|
|
1995
|
+
};
|
|
1996
|
+
|
|
1997
|
+
var select = dom.createElement('select');
|
|
1998
|
+
select.setAttribute('style', style.formSelectSTyle);
|
|
1999
|
+
select.setAttribute('id', 'formSelect');
|
|
2000
|
+
select.currentURI = null;
|
|
2001
|
+
|
|
2002
|
+
for (var uri in optionsFromClassUIfrom) {
|
|
2003
|
+
select.appendChild(createOption(uri));
|
|
2004
|
+
}
|
|
2005
|
+
|
|
2006
|
+
if (editable && options.mint) {
|
|
2007
|
+
var mint = dom.createElement('option');
|
|
2008
|
+
mint.appendChild(dom.createTextNode(options.mint));
|
|
2009
|
+
mint.AJAR_mint = true; // Flag it
|
|
2010
|
+
|
|
2011
|
+
select.insertBefore(mint, select.firstChild);
|
|
2012
|
+
}
|
|
2013
|
+
|
|
2014
|
+
if (select.children.length === 0) select.insertBefore(createDefaultSelectOption(), select.firstChild);
|
|
2015
|
+
|
|
2016
|
+
select.update = function (newSelectedOptions) {
|
|
2017
|
+
selectedOptions = newSelectedOptions;
|
|
2018
|
+
var ds = [];
|
|
2019
|
+
var is = [];
|
|
2020
|
+
|
|
2021
|
+
var removeValue = function removeValue(t) {
|
|
2022
|
+
if (kb.holds(subject, predicate, t, dataDoc)) {
|
|
2023
|
+
ds.push($rdf.st(subject, predicate, t, dataDoc));
|
|
2024
|
+
}
|
|
2025
|
+
};
|
|
2026
|
+
|
|
2027
|
+
var addValue = function addValue(t) {
|
|
2028
|
+
if (!kb.holds(subject, predicate, t, dataDoc)) {
|
|
2029
|
+
is.push($rdf.st(subject, predicate, t, dataDoc)); // console.log("----value added " + t)
|
|
2030
|
+
}
|
|
2031
|
+
|
|
2032
|
+
if (uiFrom && !kb.holds(t, ns.rdf('type'), kb.sym(uiFrom), dataDoc)) {
|
|
2033
|
+
is.push($rdf.st(t, ns.rdf('type'), kb.sym(uiFrom), dataDoc)); // console.log("----added type to value " + uiFrom)
|
|
2034
|
+
}
|
|
2035
|
+
};
|
|
2036
|
+
|
|
2037
|
+
var existingValues = kb.each(subject, predicate, null, dataDoc).map(function (object) {
|
|
2038
|
+
return object.value;
|
|
2039
|
+
});
|
|
2040
|
+
|
|
2041
|
+
var _iterator2 = _createForOfIteratorHelper(existingValues),
|
|
2042
|
+
_step2;
|
|
2043
|
+
|
|
2044
|
+
try {
|
|
2045
|
+
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
2046
|
+
var value = _step2.value;
|
|
2047
|
+
if (!containsObject(value, selectedOptions)) removeValue($rdf.sym(value));
|
|
2048
|
+
}
|
|
2049
|
+
} catch (err) {
|
|
2050
|
+
_iterator2.e(err);
|
|
2051
|
+
} finally {
|
|
2052
|
+
_iterator2.f();
|
|
2053
|
+
}
|
|
2054
|
+
|
|
2055
|
+
var _iterator3 = _createForOfIteratorHelper(selectedOptions),
|
|
2056
|
+
_step3;
|
|
2057
|
+
|
|
2058
|
+
try {
|
|
2059
|
+
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
|
2060
|
+
var _value = _step3.value;
|
|
2061
|
+
if (!(_value in existingValues)) addValue($rdf.sym(_value));
|
|
2062
|
+
}
|
|
2063
|
+
} catch (err) {
|
|
2064
|
+
_iterator3.e(err);
|
|
2065
|
+
} finally {
|
|
2066
|
+
_iterator3.f();
|
|
2067
|
+
}
|
|
2068
|
+
|
|
2069
|
+
kb.updater.update(ds, is, function (uri, ok, body) {
|
|
2070
|
+
if (!ok) return select.parentNode.appendChild((0, _error.errorMessageBlock)(dom, 'Error updating data in select: ' + body));
|
|
2071
|
+
select.refresh();
|
|
2072
|
+
if (callbackFunction) callbackFunction(ok, {
|
|
2073
|
+
widget: 'select',
|
|
2074
|
+
event: 'change'
|
|
2075
|
+
});
|
|
2076
|
+
});
|
|
2077
|
+
};
|
|
2078
|
+
|
|
2079
|
+
select.refresh = function () {
|
|
2080
|
+
select.disabled = true; // unlocked any conflict we had got into
|
|
2081
|
+
|
|
2082
|
+
var is = [];
|
|
2083
|
+
var newObject;
|
|
2084
|
+
|
|
2085
|
+
for (var _i3 = 0; _i3 < select.options.length; _i3++) {
|
|
2086
|
+
var opt = select.options[_i3];
|
|
2087
|
+
|
|
2088
|
+
if (opt.selected && opt.AJAR_mint) {
|
|
2089
|
+
// not sure if this 'if' is used because I cannot find mintClass
|
|
2090
|
+
if (options.mintClass) {
|
|
2091
|
+
var thisForm = promptForNew(dom, kb, subject, predicate, uiFrom, options.subForm, dataDoc, function (ok, body) {
|
|
2092
|
+
if (!ok) {
|
|
2093
|
+
callbackFunction(ok, body, {
|
|
2094
|
+
change: 'new'
|
|
2095
|
+
}); // @@ if ok, need some form of refresh of the select for the new thing
|
|
2096
|
+
}
|
|
2097
|
+
});
|
|
2098
|
+
select.parentNode.appendChild(thisForm);
|
|
2099
|
+
newObject = thisForm.AJAR_subject;
|
|
2100
|
+
} else {
|
|
2101
|
+
newObject = newThing(dataDoc);
|
|
2102
|
+
}
|
|
2103
|
+
|
|
2104
|
+
is.push($rdf.st(subject, predicate, kb.sym(newObject), dataDoc));
|
|
2105
|
+
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
|
|
2106
|
+
|
|
2107
|
+
if (options.mintStatementsFun) {
|
|
2108
|
+
is = is.concat(options.mintStatementsFun(newObject));
|
|
2109
|
+
}
|
|
2110
|
+
|
|
2111
|
+
select.currentURI = newObject;
|
|
2112
|
+
}
|
|
2113
|
+
|
|
2114
|
+
if (!opt.AJAR_uri) continue; // a prompt or mint
|
|
2115
|
+
|
|
2116
|
+
if (opt.selected && containsObject(opt.AJAR_uri, selectedOptions)) {
|
|
2117
|
+
select.currentURI = opt.AJAR_uri;
|
|
2118
|
+
}
|
|
2119
|
+
|
|
2120
|
+
if (!containsObject(opt.AJAR_uri, selectedOptions)) opt.removeAttribute('selected');
|
|
2121
|
+
if (containsObject(opt.AJAR_uri, selectedOptions)) opt.setAttribute('selected', 'true');
|
|
2122
|
+
}
|
|
2123
|
+
|
|
2124
|
+
log.info('selectForOptions: data doc = ' + dataDoc);
|
|
2125
|
+
|
|
2126
|
+
if (select.currentURI && options.subForm && !options.multiSelect) {
|
|
2127
|
+
addSubFormChoice(dom, container, {}, $rdf.sym(select.currentURI), options.subForm, dataDoc, function (ok, body) {
|
|
2128
|
+
if (ok) {
|
|
2129
|
+
kb.updater.update([], is, function (uri, success, errorBody) {
|
|
2130
|
+
if (!success) container.appendChild((0, _error.errorMessageBlock)(dom, 'Error updating select: ' + errorBody));
|
|
2131
|
+
});
|
|
2132
|
+
if (callbackFunction) callbackFunction(ok, {
|
|
2133
|
+
widget: 'select',
|
|
2134
|
+
event: 'new'
|
|
2135
|
+
});
|
|
2136
|
+
} else {
|
|
2137
|
+
container.appendChild((0, _error.errorMessageBlock)(dom, 'Error updating data in field of select: ' + body));
|
|
2138
|
+
}
|
|
2139
|
+
});
|
|
2140
|
+
}
|
|
2141
|
+
|
|
2142
|
+
select.disabled = false;
|
|
2143
|
+
};
|
|
2144
|
+
|
|
2145
|
+
function createOption(uri) {
|
|
2146
|
+
var option = dom.createElement('option');
|
|
2147
|
+
var c = kb.sym(uri);
|
|
2148
|
+
var label;
|
|
2149
|
+
|
|
2150
|
+
if (options.disambiguate) {
|
|
2151
|
+
label = utils.labelWithOntology(c, true); // Init. cap
|
|
2152
|
+
} else {
|
|
2153
|
+
label = utils.label(c, true);
|
|
2154
|
+
}
|
|
2155
|
+
|
|
2156
|
+
option.appendChild(dom.createTextNode(label)); // Init.
|
|
2157
|
+
|
|
2158
|
+
option.setAttribute('value', uri);
|
|
2159
|
+
var backgroundColor = kb.any(c, kb.sym('http://www.w3.org/ns/ui#backgroundColor'));
|
|
2160
|
+
|
|
2161
|
+
if (backgroundColor) {
|
|
2162
|
+
option.setAttribute('style', 'background-color: ' + backgroundColor.value + '; ');
|
|
2163
|
+
}
|
|
2164
|
+
|
|
2165
|
+
option.AJAR_uri = uri;
|
|
2166
|
+
|
|
2167
|
+
if (containsObject(c.value, selectedOptions)) {
|
|
2168
|
+
option.setAttribute('selected', 'true');
|
|
2169
|
+
}
|
|
2170
|
+
|
|
2171
|
+
return option;
|
|
2172
|
+
}
|
|
2173
|
+
|
|
2174
|
+
if (editable) {
|
|
2175
|
+
select.addEventListener('change', onChange, false);
|
|
2176
|
+
}
|
|
2177
|
+
|
|
2178
|
+
return select;
|
|
2179
|
+
} // makeSelectForChoice
|
|
2180
|
+
|
|
2181
|
+
|
|
2182
|
+
function containsObject(obj, list) {
|
|
2183
|
+
var i;
|
|
2184
|
+
|
|
2185
|
+
for (i = 0; i < list.length; i++) {
|
|
2186
|
+
if (list[i] === obj) {
|
|
2187
|
+
return true;
|
|
2188
|
+
}
|
|
2189
|
+
}
|
|
2190
|
+
|
|
2191
|
+
return false;
|
|
2192
|
+
}
|
|
1902
2193
|
//# sourceMappingURL=forms.js.map
|