solid-ui 2.4.22-d939d9d0 → 2.4.22-e3f38b00
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/dist/main.js +7288 -6602
- 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 +38 -22
- 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.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 +499 -187
- 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 +11 -7
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,6 +170,7 @@ _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]) {
|
|
@@ -264,47 +280,43 @@ _fieldFunction.field[ns.ui('Options').uri] = function (dom, container, already,
|
|
|
264
280
|
values = kb.each(subject, dependingOn);
|
|
265
281
|
}
|
|
266
282
|
|
|
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'
|
|
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'
|
|
273
286
|
|
|
274
|
-
|
|
287
|
+
var match = false;
|
|
275
288
|
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
289
|
+
for (var j = 0; j < tests.length; j++) {
|
|
290
|
+
var _iterator = _createForOfIteratorHelper(values),
|
|
291
|
+
_step;
|
|
279
292
|
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
293
|
+
try {
|
|
294
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
295
|
+
var value = _step.value;
|
|
296
|
+
var test = tests[j];
|
|
284
297
|
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
}
|
|
298
|
+
if (value.sameTerm(tests) || value.termType === test.termType && value.value === test.value) {
|
|
299
|
+
match = true;
|
|
288
300
|
}
|
|
289
|
-
} catch (err) {
|
|
290
|
-
_iterator.e(err);
|
|
291
|
-
} finally {
|
|
292
|
-
_iterator.f();
|
|
293
301
|
}
|
|
302
|
+
} catch (err) {
|
|
303
|
+
_iterator.e(err);
|
|
304
|
+
} finally {
|
|
305
|
+
_iterator.f();
|
|
294
306
|
}
|
|
307
|
+
}
|
|
295
308
|
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
if (!_field3) {
|
|
300
|
-
box.appendChild((0, _error.errorMessageBlock)(dom, 'No "use" part for case in form ' + form));
|
|
301
|
-
return box;
|
|
302
|
-
} else {
|
|
303
|
-
appendForm(dom, box, already, subject, _field3, dataDoc, callbackFunction);
|
|
304
|
-
}
|
|
309
|
+
if (match) {
|
|
310
|
+
var _field3 = kb.the(c, ui('use'));
|
|
305
311
|
|
|
306
|
-
|
|
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);
|
|
307
317
|
}
|
|
318
|
+
|
|
319
|
+
break;
|
|
308
320
|
}
|
|
309
321
|
} // @@ Add box.refresh() to sync fields with values
|
|
310
322
|
|
|
@@ -1042,9 +1054,6 @@ _fieldFunction.field[ns.ui('Choice').uri] = function (dom, container, already, s
|
|
|
1042
1054
|
var kb = _solidLogic.store;
|
|
1043
1055
|
var formDoc = form.doc ? form.doc() : null; // @@ if blank no way to know
|
|
1044
1056
|
|
|
1045
|
-
var uiMultipleInUse = false; // this signals to ui:choice that it is part of a ui:multiple
|
|
1046
|
-
|
|
1047
|
-
var multiSelect = false;
|
|
1048
1057
|
var p;
|
|
1049
1058
|
var box = dom.createElement('div');
|
|
1050
1059
|
box.setAttribute('class', 'choiceBox'); // Set flexDirection column?
|
|
@@ -1070,108 +1079,142 @@ _fieldFunction.field[ns.ui('Choice').uri] = function (dom, container, already, s
|
|
|
1070
1079
|
}
|
|
1071
1080
|
|
|
1072
1081
|
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
|
-
}
|
|
1082
|
+
// const follow = kb.anyJS(form, ui('follow'), null, formDoc) // data doc moves to new subject?
|
|
1089
1083
|
|
|
1090
1084
|
var opts = {
|
|
1091
1085
|
form: form,
|
|
1092
1086
|
subForm: subForm,
|
|
1093
|
-
multiSelect: multiSelect,
|
|
1094
|
-
firstSelectOptionText: firstSelectOptionText,
|
|
1095
|
-
uiMultipleInUse: uiMultipleInUse,
|
|
1096
1087
|
disambiguate: false
|
|
1097
1088
|
};
|
|
1098
|
-
possible = kb.each(undefined, ns.rdf('type'), uiFrom, formDoc);
|
|
1099
1089
|
|
|
1100
|
-
|
|
1101
|
-
possible
|
|
1102
|
-
|
|
1090
|
+
function getSelectorOptions() {
|
|
1091
|
+
var possible = [];
|
|
1092
|
+
var possibleProperties;
|
|
1093
|
+
possible = kb.each(undefined, ns.rdf('type'), uiFrom, formDoc);
|
|
1103
1094
|
|
|
1095
|
+
for (var x in findMembersNT(kb, uiFrom, dataDoc)) {
|
|
1096
|
+
possible.push(kb.fromNT(x));
|
|
1097
|
+
} // Use rdfs
|
|
1104
1098
|
|
|
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
1099
|
|
|
1110
|
-
|
|
1111
|
-
|
|
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)
|
|
1112
1104
|
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
}
|
|
1105
|
+
} else if (uiFrom.sameTerm(ns.rdf('Property'))) {
|
|
1106
|
+
possibleProperties = buttons.propertyTriage(kb);
|
|
1116
1107
|
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
|
|
1108
|
+
for (p in possibleProperties.op) {
|
|
1109
|
+
possible.push(kb.fromNT(p));
|
|
1110
|
+
}
|
|
1120
1111
|
|
|
1121
|
-
|
|
1122
|
-
|
|
1123
|
-
|
|
1112
|
+
for (p in possibleProperties.dp) {
|
|
1113
|
+
possible.push(kb.fromNT(p));
|
|
1114
|
+
}
|
|
1124
1115
|
|
|
1125
|
-
|
|
1126
|
-
|
|
1127
|
-
|
|
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);
|
|
1128
1119
|
|
|
1129
|
-
|
|
1130
|
-
|
|
1131
|
-
|
|
1120
|
+
for (p in possibleProperties.op) {
|
|
1121
|
+
possible.push(kb.fromNT(p));
|
|
1122
|
+
}
|
|
1132
1123
|
|
|
1133
|
-
|
|
1134
|
-
|
|
1124
|
+
opts.disambiguate = true;
|
|
1125
|
+
} else if (uiFrom.sameTerm(ns.owl('DatatypeProperty'))) {
|
|
1126
|
+
possibleProperties = buttons.propertyTriage(kb);
|
|
1127
|
+
|
|
1128
|
+
for (p in possibleProperties.dp) {
|
|
1129
|
+
possible.push(kb.fromNT(p));
|
|
1130
|
+
}
|
|
1131
|
+
|
|
1132
|
+
opts.disambiguate = true;
|
|
1135
1133
|
}
|
|
1136
1134
|
|
|
1137
|
-
|
|
1138
|
-
}
|
|
1135
|
+
return possible; // return sortByLabel(possible)
|
|
1136
|
+
} // TODO: this checks for any occurrence, regardless of true or false setting
|
|
1139
1137
|
|
|
1140
|
-
var sortedPossible = sortByLabel(possible); // TODO: this checks for any occurrence, regardless of true or false setting
|
|
1141
1138
|
|
|
1142
1139
|
if (kb.any(form, ui('canMintNew'))) {
|
|
1143
1140
|
opts.mint = '* Create new *'; // @@ could be better
|
|
1144
1141
|
}
|
|
1145
1142
|
|
|
1146
|
-
var
|
|
1147
|
-
rhs.appendChild(selector);
|
|
1148
|
-
var object;
|
|
1143
|
+
var multiSelect = kb.any(form, ui('multiselect')); // Optional
|
|
1149
1144
|
|
|
1150
|
-
if (
|
|
1151
|
-
|
|
1152
|
-
} else {
|
|
1153
|
-
object = kb.any(subject, property);
|
|
1154
|
-
}
|
|
1145
|
+
if (multiSelect) opts.multiSelect = true;
|
|
1146
|
+
var selector;
|
|
1155
1147
|
|
|
1156
|
-
|
|
1157
|
-
|
|
1158
|
-
|
|
1159
|
-
|
|
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
|
|
1160
1153
|
|
|
1161
|
-
|
|
1162
|
-
|
|
1163
|
-
|
|
1164
|
-
|
|
1165
|
-
|
|
1166
|
-
|
|
1167
|
-
*/
|
|
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);
|
|
1168
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
|
+
}
|
|
1169
1176
|
|
|
1170
|
-
|
|
1171
|
-
|
|
1172
|
-
|
|
1173
|
-
|
|
1174
|
-
|
|
1177
|
+
if (event.action === 'CLEAR_ALL_OPTIONS') {
|
|
1178
|
+
selectedOptions = [];
|
|
1179
|
+
}
|
|
1180
|
+
|
|
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
|
+
};
|
|
1213
|
+
|
|
1214
|
+
rhs.refresh();
|
|
1215
|
+
if (selector && selector.refresh) selector.refresh();
|
|
1216
|
+
return box;
|
|
1217
|
+
};
|
|
1175
1218
|
|
|
1176
1219
|
function addSubFormChoice(dom, selectDiv, already, subject, subForm, dataDoc, callbackFunction) {
|
|
1177
1220
|
(0, _fieldFunction.fieldFunction)(dom, subForm)(dom, selectDiv, already, subject, subForm, dataDoc, callbackFunction);
|
|
@@ -1514,18 +1557,15 @@ function makeDescription(dom, kb, subject, predicate, dataDoc, callbackFunction)
|
|
|
1514
1557
|
// @param subject - a term, the subject of the statement(s) being edited.
|
|
1515
1558
|
// @param predicate - a term, the predicate of the statement(s) being edited
|
|
1516
1559
|
// @param possible - a list of terms, the possible value the object can take
|
|
1517
|
-
// @param options.
|
|
1518
|
-
//
|
|
1519
|
-
// option for none selected (for non multiSelect)
|
|
1520
|
-
// @param options.uiMultipleInUse - signals that the ui:choise is used with a ui:multiple
|
|
1521
|
-
// @param options.mint - User may create thing if this sent to the prompt string eg "New foo"
|
|
1560
|
+
// @param options.nullLabel - a string to be displayed as the
|
|
1561
|
+
// option for none selected (for non multiple)
|
|
1522
1562
|
// @param options.subForm - If mint, then the form to be used for minting the new thing
|
|
1523
1563
|
// @param dataDoc - The web document being edited
|
|
1524
1564
|
// @param callbackFunction - takes (boolean ok, string errorBody)
|
|
1525
1565
|
*/
|
|
1526
1566
|
|
|
1527
1567
|
|
|
1528
|
-
function makeSelectForOptions(dom, kb, subject, predicate, possible,
|
|
1568
|
+
function makeSelectForOptions(dom, kb, subject, predicate, possible, options, dataDoc, callbackFunction) {
|
|
1529
1569
|
log.debug('Select list length now ' + possible.length);
|
|
1530
1570
|
var n = 0;
|
|
1531
1571
|
var uris = {}; // Count them
|
|
@@ -1542,7 +1582,7 @@ function makeSelectForOptions(dom, kb, subject, predicate, possible, uiFrom, opt
|
|
|
1542
1582
|
} // uris is now the set of possible options
|
|
1543
1583
|
|
|
1544
1584
|
|
|
1545
|
-
if (n === 0
|
|
1585
|
+
if (n === 0) {
|
|
1546
1586
|
return (0, _error.errorMessageBlock)(dom, "Can't do selector with no options, subject= " + subject + ' property = ' + predicate + '.');
|
|
1547
1587
|
}
|
|
1548
1588
|
|
|
@@ -1568,6 +1608,8 @@ function makeSelectForOptions(dom, kb, subject, predicate, possible, uiFrom, opt
|
|
|
1568
1608
|
actual = getActual();
|
|
1569
1609
|
|
|
1570
1610
|
var onChange = function onChange(_e) {
|
|
1611
|
+
select.disabled = true; // until data written back - gives user feedback too
|
|
1612
|
+
|
|
1571
1613
|
var ds = [];
|
|
1572
1614
|
var is = [];
|
|
1573
1615
|
|
|
@@ -1577,43 +1619,18 @@ function makeSelectForOptions(dom, kb, subject, predicate, possible, uiFrom, opt
|
|
|
1577
1619
|
}
|
|
1578
1620
|
};
|
|
1579
1621
|
|
|
1580
|
-
var newObject;
|
|
1581
|
-
|
|
1582
1622
|
for (var _i = 0; _i < select.options.length; _i++) {
|
|
1583
1623
|
var opt = select.options[_i];
|
|
1584
|
-
|
|
1585
|
-
if (opt.selected && opt.AJAR_mint) {
|
|
1586
|
-
// not sure if this 'if' is used because I cannot find mintClass
|
|
1587
|
-
if (options.mintClass) {
|
|
1588
|
-
var thisForm = promptForNew(dom, kb, subject, predicate, options.mintClass, null, dataDoc, function (ok, body) {
|
|
1589
|
-
if (!ok) {
|
|
1590
|
-
callbackFunction(ok, body, {
|
|
1591
|
-
change: 'new'
|
|
1592
|
-
}); // @@ if ok, need some form of refresh of the select for the new thing
|
|
1593
|
-
}
|
|
1594
|
-
});
|
|
1595
|
-
select.parentNode.appendChild(thisForm);
|
|
1596
|
-
newObject = thisForm.AJAR_subject;
|
|
1597
|
-
} else {
|
|
1598
|
-
newObject = newThing(dataDoc);
|
|
1599
|
-
}
|
|
1600
|
-
|
|
1601
|
-
is.push($rdf.st(subject, predicate, kb.sym(newObject), dataDoc));
|
|
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
|
|
1603
|
-
|
|
1604
|
-
if (options.mintStatementsFun) {
|
|
1605
|
-
is = is.concat(options.mintStatementsFun(newObject));
|
|
1606
|
-
}
|
|
1607
|
-
|
|
1608
|
-
select.currentURI = newObject;
|
|
1609
|
-
}
|
|
1610
|
-
|
|
1611
1624
|
if (!opt.AJAR_uri) continue; // a prompt or mint
|
|
1612
1625
|
|
|
1613
1626
|
if (opt.selected && !(opt.AJAR_uri in actual)) {
|
|
1614
1627
|
// new class
|
|
1615
1628
|
is.push($rdf.st(subject, predicate, kb.sym(opt.AJAR_uri), dataDoc));
|
|
1616
|
-
|
|
1629
|
+
}
|
|
1630
|
+
|
|
1631
|
+
if (!opt.selected && opt.AJAR_uri in actual) {
|
|
1632
|
+
// old class
|
|
1633
|
+
removeValue(kb.sym(opt.AJAR_uri));
|
|
1617
1634
|
}
|
|
1618
1635
|
|
|
1619
1636
|
if (opt.selected) select.currentURI = opt.AJAR_uri;
|
|
@@ -1633,29 +1650,25 @@ function makeSelectForOptions(dom, kb, subject, predicate, possible, uiFrom, opt
|
|
|
1633
1650
|
sel = sel.superSelect;
|
|
1634
1651
|
}
|
|
1635
1652
|
|
|
1636
|
-
log.info('selectForOptions: data doc = ' + dataDoc);
|
|
1653
|
+
log.info('selectForOptions: data doc = ' + dataDoc);
|
|
1654
|
+
kb.updater.update(ds, is, function (uri, ok, body) {
|
|
1655
|
+
actual = getActual(); // refresh
|
|
1637
1656
|
|
|
1638
|
-
removeNextSiblingsAfterElement(select);
|
|
1639
|
-
addSubFormChoice(dom, select.parentNode, {}, $rdf.sym(select.currentURI), options.subForm, dataDoc, function (ok, body) {
|
|
1640
1657
|
if (ok) {
|
|
1641
|
-
|
|
1642
|
-
actual = getActual(); // refresh
|
|
1643
|
-
|
|
1644
|
-
if (!success) select.parentNode.appendChild((0, _error.errorMessageBlock)(dom, 'Error updating select: ' + errorBody));
|
|
1645
|
-
});
|
|
1646
|
-
if (callbackFunction) callbackFunction(ok, {
|
|
1647
|
-
widget: 'select',
|
|
1648
|
-
event: 'new'
|
|
1649
|
-
});
|
|
1658
|
+
select.disabled = false; // data written back
|
|
1650
1659
|
} else {
|
|
1651
|
-
select.parentNode.appendChild((0, _error.errorMessageBlock)(dom, 'Error updating data in
|
|
1660
|
+
return select.parentNode.appendChild((0, _error.errorMessageBlock)(dom, 'Error updating data in select: ' + body));
|
|
1652
1661
|
}
|
|
1662
|
+
|
|
1663
|
+
if (callbackFunction) callbackFunction(ok, {
|
|
1664
|
+
widget: 'select',
|
|
1665
|
+
event: 'change'
|
|
1666
|
+
});
|
|
1653
1667
|
});
|
|
1654
1668
|
};
|
|
1655
1669
|
|
|
1656
1670
|
var select = dom.createElement('select');
|
|
1657
1671
|
select.setAttribute('style', style.formSelectSTyle);
|
|
1658
|
-
if (options.multiSelect) select.setAttribute('multiSelect', 'true');
|
|
1659
1672
|
select.currentURI = null;
|
|
1660
1673
|
|
|
1661
1674
|
select.refresh = function () {
|
|
@@ -1698,22 +1711,11 @@ function makeSelectForOptions(dom, kb, subject, predicate, possible, uiFrom, opt
|
|
|
1698
1711
|
select.appendChild(option);
|
|
1699
1712
|
}
|
|
1700
1713
|
|
|
1701
|
-
if (
|
|
1702
|
-
var mint = dom.createElement('option');
|
|
1703
|
-
mint.appendChild(dom.createTextNode(options.mint));
|
|
1704
|
-
mint.AJAR_mint = true; // Flag it
|
|
1705
|
-
|
|
1706
|
-
select.insertBefore(mint, select.firstChild);
|
|
1707
|
-
}
|
|
1708
|
-
|
|
1709
|
-
if (!select.currentURI && options.uiMultipleInUse) {
|
|
1714
|
+
if (!select.currentURI) {
|
|
1710
1715
|
var prompt = dom.createElement('option');
|
|
1711
|
-
prompt.appendChild(dom.createTextNode(options.
|
|
1712
|
-
prompt.disabled = true;
|
|
1713
|
-
prompt.value = true;
|
|
1714
|
-
prompt.hidden = true;
|
|
1715
|
-
prompt.selected = true;
|
|
1716
|
+
prompt.appendChild(dom.createTextNode(options.nullLabel));
|
|
1716
1717
|
select.insertBefore(prompt, select.firstChild);
|
|
1718
|
+
prompt.selected = true;
|
|
1717
1719
|
}
|
|
1718
1720
|
|
|
1719
1721
|
if (editable) {
|
|
@@ -1732,27 +1734,16 @@ function makeSelectForOptions(dom, kb, subject, predicate, possible, uiFrom, opt
|
|
|
1732
1734
|
function makeSelectForCategory(dom, kb, subject, category, dataDoc, callbackFunction) {
|
|
1733
1735
|
var du = kb.any(category, ns.owl('disjointUnionOf'));
|
|
1734
1736
|
var subs;
|
|
1735
|
-
var multiSelect = false;
|
|
1736
1737
|
|
|
1737
1738
|
if (!du) {
|
|
1738
1739
|
subs = kb.each(undefined, ns.rdfs('subClassOf'), category);
|
|
1739
|
-
multiSelect = true;
|
|
1740
1740
|
} else {
|
|
1741
1741
|
subs = du.elements;
|
|
1742
1742
|
}
|
|
1743
1743
|
|
|
1744
1744
|
log.debug('Select list length ' + subs.length);
|
|
1745
|
-
|
|
1746
|
-
|
|
1747
|
-
return (0, _error.errorMessageBlock)(dom, "Can't do " + (multiSelect ? 'multiple ' : '') + 'selector with no subclasses of category: ' + category);
|
|
1748
|
-
}
|
|
1749
|
-
|
|
1750
|
-
if (subs.length === 1) {
|
|
1751
|
-
return (0, _error.errorMessageBlock)(dom, "Can't do " + (multiSelect ? 'multiple ' : '') + 'selector with only 1 subclass of category: ' + category + ':' + subs[1]);
|
|
1752
|
-
}
|
|
1753
|
-
|
|
1754
|
-
return makeSelectForOptions(dom, kb, subject, ns.rdf('type'), subs, null, {
|
|
1755
|
-
multiSelect: multiSelect
|
|
1745
|
+
return makeSelectForOptions(dom, kb, subject, ns.rdf('type'), subs, {
|
|
1746
|
+
nullLabel: '* Select type *'
|
|
1756
1747
|
}, dataDoc, callbackFunction);
|
|
1757
1748
|
}
|
|
1758
1749
|
/** Make SELECT element to select subclasses recurively
|
|
@@ -1786,8 +1777,7 @@ function makeSelectForNestedCategory(dom, kb, subject, category, dataDoc, callba
|
|
|
1786
1777
|
function onChange(ok, body) {
|
|
1787
1778
|
if (ok) update();
|
|
1788
1779
|
callbackFunction(ok, body);
|
|
1789
|
-
}
|
|
1790
|
-
|
|
1780
|
+
}
|
|
1791
1781
|
|
|
1792
1782
|
var select = makeSelectForCategory(dom, kb, subject, category, dataDoc, onChange);
|
|
1793
1783
|
container.appendChild(select);
|
|
@@ -1942,4 +1932,326 @@ function newThing(doc) {
|
|
|
1942
1932
|
var now = new Date();
|
|
1943
1933
|
return $rdf.sym(doc.uri + '#' + 'id' + ('' + now.getTime()));
|
|
1944
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
|
+
} // This functions replaces the findMembersNT (thisClass) from rdflib until we fix: https://github.com/linkeddata/rdflib.js/issues/565
|
|
2193
|
+
|
|
2194
|
+
/**
|
|
2195
|
+
* For anything which has thisClass (or any subclass) as its type,
|
|
2196
|
+
* or is the object of something which has thisClass (or any subclass) as its range,
|
|
2197
|
+
* or subject of something which has thisClass (or any subclass) as its domain
|
|
2198
|
+
* We don't bother doing subproperty (yet?) as it doesn't seem to be used
|
|
2199
|
+
* much.
|
|
2200
|
+
* Get all the Classes of which we can RDFS-infer the subject is a member
|
|
2201
|
+
* @return a hash of URIs
|
|
2202
|
+
*/
|
|
2203
|
+
|
|
2204
|
+
|
|
2205
|
+
function findMembersNT(store, thisClass, quad) {
|
|
2206
|
+
var len2;
|
|
2207
|
+
var len4;
|
|
2208
|
+
var m;
|
|
2209
|
+
var pred;
|
|
2210
|
+
var ref1;
|
|
2211
|
+
var ref2;
|
|
2212
|
+
var ref3;
|
|
2213
|
+
var ref4;
|
|
2214
|
+
var ref5;
|
|
2215
|
+
var st;
|
|
2216
|
+
var u;
|
|
2217
|
+
var seeds = {};
|
|
2218
|
+
seeds[thisClass.toNT()] = true;
|
|
2219
|
+
var members = {};
|
|
2220
|
+
var ref = store.transitiveClosure(seeds, store.rdfFactory.namedNode('http://www.w3.org/2000/01/rdf-schema#subClassOf'), true);
|
|
2221
|
+
|
|
2222
|
+
for (var t in ref) {
|
|
2223
|
+
ref1 = store.statementsMatching(null, store.rdfFactory.namedNode('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), store.fromNT(t), quad);
|
|
2224
|
+
|
|
2225
|
+
for (var i = 0, len = ref1.length; i < len; i++) {
|
|
2226
|
+
st = ref1[i];
|
|
2227
|
+
members[st.subject.toNT()] = st;
|
|
2228
|
+
}
|
|
2229
|
+
|
|
2230
|
+
ref2 = store.each(null, store.rdfFactory.namedNode('http://www.w3.org/2000/01/rdf-schema#domain'), store.fromNT(t), quad);
|
|
2231
|
+
|
|
2232
|
+
for (var l = 0, len1 = ref2.length; l < len1; l++) {
|
|
2233
|
+
pred = ref2[l];
|
|
2234
|
+
ref3 = store.statementsMatching(null, pred, null, quad);
|
|
2235
|
+
|
|
2236
|
+
for (m = 0, len2 = ref3.length; m < len2; m++) {
|
|
2237
|
+
st = ref3[m];
|
|
2238
|
+
members[st.subject.toNT()] = st;
|
|
2239
|
+
}
|
|
2240
|
+
}
|
|
2241
|
+
|
|
2242
|
+
ref4 = store.each(null, store.rdfFactory.namedNode('http://www.w3.org/2000/01/rdf-schema#range'), store.fromNT(t), quad);
|
|
2243
|
+
|
|
2244
|
+
for (var q = 0, len3 = ref4.length; q < len3; q++) {
|
|
2245
|
+
pred = ref4[q];
|
|
2246
|
+
ref5 = store.statementsMatching(null, pred, null, quad);
|
|
2247
|
+
|
|
2248
|
+
for (u = 0, len4 = ref5.length; u < len4; u++) {
|
|
2249
|
+
st = ref5[u];
|
|
2250
|
+
members[st.object.toNT()] = st;
|
|
2251
|
+
}
|
|
2252
|
+
}
|
|
2253
|
+
}
|
|
2254
|
+
|
|
2255
|
+
return members;
|
|
2256
|
+
}
|
|
1945
2257
|
//# sourceMappingURL=forms.js.map
|