solid-ui 2.4.22 → 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.
Files changed (97) hide show
  1. package/README.md +23 -58
  2. package/dist/main.js +8140 -7162
  3. package/dist/main.js.map +1 -1
  4. package/lib/acl/access-controller.js.map +1 -1
  5. package/lib/acl/access-groups.js.map +1 -1
  6. package/lib/acl/acl-control.js.map +1 -1
  7. package/lib/acl/acl.js.map +1 -1
  8. package/lib/acl/add-agent-buttons.js +0 -1
  9. package/lib/acl/add-agent-buttons.js.map +1 -1
  10. package/lib/acl/index.js.map +1 -1
  11. package/lib/acl/styles.js.map +1 -1
  12. package/lib/acl/types.js.map +1 -1
  13. package/lib/chat/bookmarks.js +2 -4
  14. package/lib/chat/bookmarks.js.map +1 -1
  15. package/lib/chat/chatLogic.js.map +1 -1
  16. package/lib/chat/dateFolder.js.map +1 -1
  17. package/lib/chat/infinite.js.map +1 -1
  18. package/lib/chat/message.js.map +1 -1
  19. package/lib/chat/messageTools.js.map +1 -1
  20. package/lib/chat/thread.js.map +1 -1
  21. package/lib/create/create.js.map +1 -1
  22. package/lib/create/index.js.map +1 -1
  23. package/lib/create/types.js.map +1 -1
  24. package/lib/debug.js.map +1 -1
  25. package/lib/folders.js.map +1 -1
  26. package/lib/footer/index.js.map +1 -1
  27. package/lib/footer/styleMap.js.map +1 -1
  28. package/lib/header/empty-profile.js.map +1 -1
  29. package/lib/header/index.js.map +1 -1
  30. package/lib/header/styleMap.js.map +1 -1
  31. package/lib/iconBase.js +3 -2
  32. package/lib/iconBase.js.map +1 -1
  33. package/lib/icons/solid_logo.js.map +1 -1
  34. package/lib/index.js.map +1 -1
  35. package/lib/jss/index.js.map +1 -1
  36. package/lib/log.js.map +1 -1
  37. package/lib/login/login.d.ts +9 -8
  38. package/lib/login/login.d.ts.map +1 -1
  39. package/lib/login/login.js +298 -344
  40. package/lib/login/login.js.map +1 -1
  41. package/lib/matrix/index.js.map +1 -1
  42. package/lib/matrix/matrix.js.map +1 -1
  43. package/lib/matrix/types.js.map +1 -1
  44. package/lib/media/index.js.map +1 -1
  45. package/lib/media/media-capture.js.map +1 -1
  46. package/lib/messageArea.js.map +1 -1
  47. package/lib/noun_Camera_1618446_000000.js.map +1 -1
  48. package/lib/ns.js.map +1 -1
  49. package/lib/pad.js.map +1 -1
  50. package/lib/participation.js.map +1 -1
  51. package/lib/preferences.js.map +1 -1
  52. package/lib/signup/config-default.js.map +1 -1
  53. package/lib/signup/signup.js.map +1 -1
  54. package/lib/stories/decorators.js.map +1 -1
  55. package/lib/style.js.map +1 -1
  56. package/lib/style_multiSelect.js +67 -0
  57. package/lib/style_multiSelect.js.map +1 -0
  58. package/lib/table.js.map +1 -1
  59. package/lib/tabs.d.ts +1 -1
  60. package/lib/tabs.d.ts.map +1 -1
  61. package/lib/tabs.js +38 -22
  62. package/lib/tabs.js.map +1 -1
  63. package/lib/typings.d.js.map +1 -1
  64. package/lib/utils/headerFooterHelpers.js.map +1 -1
  65. package/lib/utils/index.js.map +1 -1
  66. package/lib/utils/label.js +1 -1
  67. package/lib/utils/label.js.map +1 -1
  68. package/lib/versionInfo.d.ts +9 -9
  69. package/lib/versionInfo.js +14 -14
  70. package/lib/versionInfo.js.map +1 -1
  71. package/lib/widgets/buttons/iconLinks.js.map +1 -1
  72. package/lib/widgets/buttons.d.ts.map +1 -1
  73. package/lib/widgets/buttons.js +2 -0
  74. package/lib/widgets/buttons.js.map +1 -1
  75. package/lib/widgets/dragAndDrop.js.map +1 -1
  76. package/lib/widgets/error.d.ts +0 -12
  77. package/lib/widgets/error.d.ts.map +1 -1
  78. package/lib/widgets/error.js +5 -0
  79. package/lib/widgets/error.js.map +1 -1
  80. package/lib/widgets/forms/autocomplete/autocompleteBar.js.map +1 -1
  81. package/lib/widgets/forms/autocomplete/autocompleteField.js.map +1 -1
  82. package/lib/widgets/forms/autocomplete/autocompletePicker.js.map +1 -1
  83. package/lib/widgets/forms/autocomplete/language.js.map +1 -1
  84. package/lib/widgets/forms/autocomplete/publicData.js.map +1 -1
  85. package/lib/widgets/forms/basic.js.map +1 -1
  86. package/lib/widgets/forms/comment.js.map +1 -1
  87. package/lib/widgets/forms/fieldFunction.js.map +1 -1
  88. package/lib/widgets/forms/fieldParams.js.map +1 -1
  89. package/lib/widgets/forms/formStyle.js.map +1 -1
  90. package/lib/widgets/forms.js +690 -103
  91. package/lib/widgets/forms.js.map +1 -1
  92. package/lib/widgets/index.js.map +1 -1
  93. package/lib/widgets/multiSelect.js +784 -0
  94. package/lib/widgets/multiSelect.js.map +1 -0
  95. package/lib/widgets/peoplePicker.js.map +1 -1
  96. package/lib/widgets/widgetHelpers.js.map +1 -1
  97. package/package.json +51 -46
@@ -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,14 +171,16 @@ _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]) {
161
178
  // been there done that
162
- box.appendChild(dom.createTextNode('Group: see above ' + key));
163
- var plist = [$rdf.st(subject, ns.owl('sameAs'), subject)]; // @@ need prev subject
179
+ box.appendChild(dom.createTextNode('Group: see above ' + key)); // TODO fix dependency cycle to solid-panes by calling outlineManager
180
+ // const plist = [$rdf.st(subject, ns.owl('sameAs'), subject)] // @@ need prev subject
181
+ // dom.outlineManager.appendPropertyTRs(box, plist)
182
+ // dom.appendChild(plist)
164
183
 
165
- dom.outlineManager.appendPropertyTRs(box, plist);
166
184
  return box;
167
185
  }
168
186
 
@@ -263,47 +281,43 @@ _fieldFunction.field[ns.ui('Options').uri] = function (dom, container, already,
263
281
  values = kb.each(subject, dependingOn);
264
282
  }
265
283
 
266
- if (values.length === 0) {
267
- box.appendChild((0, _error.errorMessageBlock)(dom, "Can't select subform as no value of: " + dependingOn));
268
- } else {
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'
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'
272
287
 
273
- var match = false;
288
+ var match = false;
274
289
 
275
- for (var j = 0; j < tests.length; j++) {
276
- var _iterator = _createForOfIteratorHelper(values),
277
- _step;
290
+ for (var j = 0; j < tests.length; j++) {
291
+ var _iterator = _createForOfIteratorHelper(values),
292
+ _step;
278
293
 
279
- try {
280
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
281
- var value = _step.value;
282
- var test = tests[j];
294
+ try {
295
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
296
+ var value = _step.value;
297
+ var test = tests[j];
283
298
 
284
- if (value.sameTerm(tests) || value.termType === test.termType && value.value === test.value) {
285
- match = true;
286
- }
299
+ if (value.sameTerm(tests) || value.termType === test.termType && value.value === test.value) {
300
+ match = true;
287
301
  }
288
- } catch (err) {
289
- _iterator.e(err);
290
- } finally {
291
- _iterator.f();
292
302
  }
303
+ } catch (err) {
304
+ _iterator.e(err);
305
+ } finally {
306
+ _iterator.f();
293
307
  }
308
+ }
294
309
 
295
- if (match) {
296
- var _field3 = kb.the(c, ui('use'));
310
+ if (match) {
311
+ var _field3 = kb.the(c, ui('use'));
297
312
 
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
- }
304
-
305
- 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);
306
318
  }
319
+
320
+ break;
307
321
  }
308
322
  } // @@ Add box.refresh() to sync fields with values
309
323
 
@@ -591,7 +605,7 @@ _fieldFunction.field[ns.ui('Multiple').uri] = function (dom, container, already,
591
605
  // delete button and move buttons
592
606
 
593
607
  if (kb.updater.editable(dataDoc.uri)) {
594
- buttons.deleteButtonWithCheck(dom, subField, utils.label(property), deleteThisItem);
608
+ buttons.deleteButtonWithCheck(dom, subField, multipleUIlabel, deleteThisItem);
595
609
 
596
610
  if (ordered) {
597
611
  // Add controsl in a frame
@@ -642,7 +656,7 @@ _fieldFunction.field[ns.ui('Multiple').uri] = function (dom, container, already,
642
656
 
643
657
  var _shim = dom.createElement('div');
644
658
 
645
- _shim.appendChild(subField); // Subfield has its own laytout
659
+ _shim.appendChild(subField); // Subfield has its own layout
646
660
 
647
661
 
648
662
  frame.appendChild(_shim);
@@ -691,6 +705,8 @@ _fieldFunction.field[ns.ui('Multiple').uri] = function (dom, container, already,
691
705
  return shim;
692
706
  }
693
707
 
708
+ var multipleUIlabel = kb.any(form, ui('label'));
709
+ if (!multipleUIlabel) multipleUIlabel = utils.label(property);
694
710
  var min = kb.any(form, ui('min')); // This is the minimum number -- default 0
695
711
 
696
712
  min = min ? 0 + min.value : 0;
@@ -731,10 +747,9 @@ _fieldFunction.field[ns.ui('Multiple').uri] = function (dom, container, already,
731
747
  img.setAttribute('src', plusIconURI); // plus sign
732
748
 
733
749
  img.setAttribute('style', 'margin: 0.2em; width: 1.5em; height:1.5em');
734
- img.title = 'Click to add one or more ' + utils.predicateLabel(property, reverse);
735
- var prompt = tail.appendChild(dom.createElement('span'));
736
- prompt.textContent = (values.length === 0 ? 'Add one or more ' : 'Add more ') + utils.predicateLabel(property, reverse); // utils.label(property)
737
-
750
+ img.title = 'Click to add another ' + multipleUIlabel;
751
+ var prompt = dom.createElement('span');
752
+ prompt.textContent = (values.length === 0 ? 'Add another ' : 'Add ') + multipleUIlabel;
738
753
  tail.addEventListener('click', /*#__PURE__*/function () {
739
754
  var _ref3 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee5(_eventNotUsed) {
740
755
  return _regenerator["default"].wrap(function _callee5$(_context5) {
@@ -756,6 +771,7 @@ _fieldFunction.field[ns.ui('Multiple').uri] = function (dom, container, already,
756
771
  return _ref3.apply(this, arguments);
757
772
  };
758
773
  }(), true);
774
+ tail.appendChild(prompt);
759
775
  }
760
776
 
761
777
  function createListIfNecessary() {
@@ -1017,28 +1033,38 @@ _fieldFunction.field[ns.ui('Classifier').uri] = function (dom, container, alread
1017
1033
  **
1018
1034
  ** Not nested. Generates a link to something from a given class.
1019
1035
  ** Optional subform for the thing selected.
1036
+ ** Generates a subForm based on a ui:use form
1037
+ ** Will look like:
1038
+ ** <div id=dropDownDiv>
1039
+ ** <div id=labelOfDropDown>
1040
+ ** <div id=selectDiv>
1041
+ ** <select id=dropDownSelect>
1042
+ ** <option> ....
1043
+ ** <subForm>
1020
1044
  ** Alternative implementatons caould be:
1021
1045
  ** -- pop-up menu (as here)
1022
1046
  ** -- radio buttons
1023
1047
  ** -- auto-complete typing
1024
1048
  **
1025
- ** Todo: Deal with multiple. Maybe merge with multiple code.
1049
+ ** TODO: according to ontology ui:choice can also have ns.ui('default') - this is not implemented yet
1026
1050
  */
1027
1051
 
1028
1052
 
1029
1053
  _fieldFunction.field[ns.ui('Choice').uri] = function (dom, container, already, subject, form, dataDoc, callbackFunction) {
1030
1054
  var ui = ns.ui;
1031
1055
  var kb = _solidLogic.store;
1032
- var multiple = false;
1033
1056
  var formDoc = form.doc ? form.doc() : null; // @@ if blank no way to know
1034
1057
 
1035
1058
  var p;
1036
- var box = dom.createElement('div'); // Set flexDirection column?
1059
+ var box = dom.createElement('div');
1060
+ box.setAttribute('class', 'choiceBox'); // Set flexDirection column?
1037
1061
 
1038
1062
  if (container) container.appendChild(box);
1039
1063
  var lhs = dom.createElement('div');
1064
+ lhs.setAttribute('class', 'formFieldName choiceBox-label');
1040
1065
  box.appendChild(lhs);
1041
1066
  var rhs = dom.createElement('div');
1067
+ rhs.setAttribute('class', 'formFieldValue choiceBox-selectBox');
1042
1068
  box.appendChild(rhs);
1043
1069
  var property = kb.any(form, ui('property'));
1044
1070
 
@@ -1047,87 +1073,153 @@ _fieldFunction.field[ns.ui('Choice').uri] = function (dom, container, already, s
1047
1073
  }
1048
1074
 
1049
1075
  lhs.appendChild((0, _basic.fieldLabel)(dom, property, form));
1050
- var from = kb.any(form, ui('from'));
1076
+ var uiFrom = kb.any(form, ui('from'));
1051
1077
 
1052
- if (!from) {
1078
+ if (!uiFrom) {
1053
1079
  return (0, _error.errorMessageBlock)(dom, "No 'from' for Choice: " + form);
1054
1080
  }
1055
1081
 
1056
1082
  var subForm = kb.any(form, ui('use')); // Optional
1083
+ // const follow = kb.anyJS(form, ui('follow'), null, formDoc) // data doc moves to new subject?
1057
1084
 
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
1085
  var opts = {
1064
1086
  form: form,
1065
- multiple: multiple,
1066
- nullLabel: nullLabel,
1087
+ subForm: subForm,
1067
1088
  disambiguate: false
1068
1089
  };
1069
- possible = kb.each(undefined, ns.rdf('type'), from, formDoc);
1070
1090
 
1071
- for (var x in kb.findMembersNT(from)) {
1072
- possible.push(kb.fromNT(x));
1073
- } // Use rdfs
1091
+ function getSelectorOptions() {
1092
+ var possible = [];
1093
+ var possibleProperties;
1094
+ possible = kb.each(undefined, ns.rdf('type'), uiFrom, formDoc);
1074
1095
 
1096
+ for (var x in findMembersNT(kb, uiFrom, dataDoc)) {
1097
+ possible.push(kb.fromNT(x));
1098
+ } // Use rdfs
1075
1099
 
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
1100
 
1081
- } else if (from.sameTerm(ns.rdf('Property'))) {
1082
- possibleProperties = buttons.propertyTriage(kb);
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)
1083
1105
 
1084
- for (p in possibleProperties.op) {
1085
- possible.push(kb.fromNT(p));
1086
- }
1106
+ } else if (uiFrom.sameTerm(ns.rdf('Property'))) {
1107
+ possibleProperties = buttons.propertyTriage(kb);
1087
1108
 
1088
- for (p in possibleProperties.dp) {
1089
- possible.push(kb.fromNT(p));
1090
- }
1109
+ for (p in possibleProperties.op) {
1110
+ possible.push(kb.fromNT(p));
1111
+ }
1091
1112
 
1092
- opts.disambiguate = true; // This is a big class, and the labels won't be enough.
1093
- } else if (from.sameTerm(ns.owl('ObjectProperty'))) {
1094
- possibleProperties = buttons.propertyTriage(kb);
1113
+ for (p in possibleProperties.dp) {
1114
+ possible.push(kb.fromNT(p));
1115
+ }
1095
1116
 
1096
- for (p in possibleProperties.op) {
1097
- possible.push(kb.fromNT(p));
1098
- }
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);
1099
1120
 
1100
- opts.disambiguate = true;
1101
- } else if (from.sameTerm(ns.owl('DatatypeProperty'))) {
1102
- possibleProperties = buttons.propertyTriage(kb);
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
+ }
1103
1132
 
1104
- for (p in possibleProperties.dp) {
1105
- possible.push(kb.fromNT(p));
1133
+ opts.disambiguate = true;
1106
1134
  }
1107
1135
 
1108
- opts.disambiguate = true;
1109
- }
1136
+ return possible; // return sortByLabel(possible)
1137
+ } // TODO: this checks for any occurrence, regardless of true or false setting
1110
1138
 
1111
- var object = kb.any(subject, property);
1112
1139
 
1113
- function addSubForm() {
1114
- object = kb.any(subject, property);
1115
- (0, _fieldFunction.fieldFunction)(dom, subForm)(dom, rhs, already, object, subForm, follow ? object.doc() : dataDoc, callbackFunction);
1140
+ if (kb.any(form, ui('canMintNew'))) {
1141
+ opts.mint = '* Create new *'; // @@ could be better
1116
1142
  }
1117
1143
 
1118
- var possible2 = sortByLabel(possible);
1144
+ var multiSelect = kb.any(form, ui('multiselect')); // Optional
1145
+
1146
+ if (multiSelect) opts.multiSelect = true;
1147
+ var selector;
1148
+
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
1154
+
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);
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
+ }
1119
1177
 
1120
- if (kb.any(form, ui('canMintNew'))) {
1121
- opts.mint = '* New *'; // @@ could be better
1178
+ if (event.action === 'CLEAR_ALL_OPTIONS') {
1179
+ selectedOptions = [];
1180
+ }
1122
1181
 
1123
- opts.subForm = subForm;
1124
- }
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
+ };
1125
1214
 
1126
- var selector = makeSelectForOptions(dom, kb, subject, property, possible2, opts, dataDoc, callbackFunction);
1127
- rhs.appendChild(selector);
1128
- if (object && subForm) addSubForm();
1215
+ rhs.refresh();
1216
+ if (selector && selector.refresh) selector.refresh();
1129
1217
  return box;
1130
- }; // Documentation - non-interactive fields
1218
+ };
1219
+
1220
+ function addSubFormChoice(dom, selectDiv, already, subject, subForm, dataDoc, callbackFunction) {
1221
+ (0, _fieldFunction.fieldFunction)(dom, subForm)(dom, selectDiv, already, subject, subForm, dataDoc, callbackFunction);
1222
+ } // Documentation - non-interactive fields
1131
1223
  //
1132
1224
 
1133
1225
 
@@ -1330,7 +1422,8 @@ function promptForNew(dom, kb, subject, predicate, theClass, form, dataDoc, call
1330
1422
  b.setAttribute('type', 'button');
1331
1423
  b.setAttribute('style', 'float: right;');
1332
1424
  b.innerHTML = 'Goto ' + utils.label(theClass);
1333
- b.addEventListener('click', function (_e) {
1425
+ b.addEventListener('click', // TODO fix dependency cycle to solid-panes by calling outlineManager
1426
+ function (_e) {
1334
1427
  dom.outlineManager.GotoSubject(theClass, true, undefined, true, undefined);
1335
1428
  }, false);
1336
1429
  return box;
@@ -1475,7 +1568,7 @@ function makeDescription(dom, kb, subject, predicate, dataDoc, callbackFunction)
1475
1568
  */
1476
1569
 
1477
1570
 
1478
- function makeSelectForOptions(dom, kb, subject, predicate, possible, options, dataDoc, callbackFunction) {
1571
+ function makeSelectForClassifierOptions(dom, kb, subject, predicate, possible, options, dataDoc, callbackFunction) {
1479
1572
  log.debug('Select list length now ' + possible.length);
1480
1573
  var n = 0;
1481
1574
  var uris = {}; // Count them
@@ -1485,7 +1578,7 @@ function makeSelectForOptions(dom, kb, subject, predicate, possible, options, da
1485
1578
  for (var i = 0; i < possible.length; i++) {
1486
1579
  var sub = possible[i]; // @@ Maybe; make this so it works with blank nodes too
1487
1580
 
1488
- if (!sub.uri) debug.warn("makeSelectForOptions: option does not have an uri: ".concat(sub, ", with predicate: ").concat(predicate));
1581
+ if (!sub.uri) debug.warn("makeSelectForClassifierOptions: option does not have an uri: ".concat(sub, ", with predicate: ").concat(predicate));
1489
1582
  if (!sub.uri || sub.uri in uris) continue;
1490
1583
  uris[sub.uri] = true;
1491
1584
  n++;
@@ -1496,7 +1589,7 @@ function makeSelectForOptions(dom, kb, subject, predicate, possible, options, da
1496
1589
  return (0, _error.errorMessageBlock)(dom, "Can't do selector with no options, subject= " + subject + ' property = ' + predicate + '.');
1497
1590
  }
1498
1591
 
1499
- log.debug('makeSelectForOptions: dataDoc=' + dataDoc);
1592
+ log.debug('makeSelectForClassifierOptions: dataDoc=' + dataDoc);
1500
1593
  var actual;
1501
1594
 
1502
1595
  var getActual = function getActual() {
@@ -1590,7 +1683,7 @@ function makeSelectForOptions(dom, kb, subject, predicate, possible, options, da
1590
1683
  });
1591
1684
  }
1592
1685
 
1593
- log.info('selectForOptions: data doc = ' + dataDoc);
1686
+ log.info('makeSelectForClassifierOptions: data doc = ' + dataDoc);
1594
1687
  kb.updater.update(ds, is, function (uri, ok, body) {
1595
1688
  actual = getActual(); // refresh
1596
1689
 
@@ -1676,6 +1769,179 @@ function makeSelectForOptions(dom, kb, subject, predicate, possible, options, da
1676
1769
  select.addEventListener('change', onChange, false);
1677
1770
  }
1678
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));
1937
+ select.insertBefore(prompt, select.firstChild);
1938
+ prompt.selected = true;
1939
+ }
1940
+
1941
+ if (editable) {
1942
+ select.addEventListener('change', onChange, false);
1943
+ }
1944
+
1679
1945
  return select;
1680
1946
  } // makeSelectForOptions
1681
1947
  // Make SELECT element to select subclasses
@@ -1707,9 +1973,9 @@ function makeSelectForCategory(dom, kb, subject, category, dataDoc, callbackFunc
1707
1973
  return (0, _error.errorMessageBlock)(dom, "Can't do " + (multiple ? 'multiple ' : '') + 'selector with only 1 subclass of category: ' + category + ':' + subs[1]);
1708
1974
  }
1709
1975
 
1710
- return makeSelectForOptions(dom, kb, subject, ns.rdf('type'), subs, {
1976
+ return makeSelectForClassifierOptions(dom, kb, subject, ns.rdf('type'), subs, {
1711
1977
  multiple: multiple,
1712
- nullPrompt: '--classify--'
1978
+ nullLabel: '* Select type *'
1713
1979
  }, dataDoc, callbackFunction);
1714
1980
  }
1715
1981
  /** Make SELECT element to select subclasses recurively
@@ -1743,8 +2009,7 @@ function makeSelectForNestedCategory(dom, kb, subject, category, dataDoc, callba
1743
2009
  function onChange(ok, body) {
1744
2010
  if (ok) update();
1745
2011
  callbackFunction(ok, body);
1746
- } // eslint-disable-next-line prefer-const
1747
-
2012
+ }
1748
2013
 
1749
2014
  var select = makeSelectForCategory(dom, kb, subject, category, dataDoc, onChange);
1750
2015
  container.appendChild(select);
@@ -1899,4 +2164,326 @@ function newThing(doc) {
1899
2164
  var now = new Date();
1900
2165
  return $rdf.sym(doc.uri + '#' + 'id' + ('' + now.getTime()));
1901
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
+ }
1902
2489
  //# sourceMappingURL=forms.js.map