solid-ui 2.4.22-f5caaadf → 2.4.22-fd0ccabe
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 +103 -71
- package/dist/main.js.map +1 -1
- package/lib/versionInfo.js +5 -5
- package/lib/versionInfo.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/forms.js +97 -67
- package/lib/widgets/forms.js.map +1 -1
- package/package.json +1 -1
package/lib/widgets/forms.js
CHANGED
|
@@ -159,10 +159,11 @@ _fieldFunction.field[ns.ui('Form').uri] = _fieldFunction.field[ns.ui('Group').ur
|
|
|
159
159
|
|
|
160
160
|
if (already[key]) {
|
|
161
161
|
// been there done that
|
|
162
|
-
box.appendChild(dom.createTextNode('Group: see above ' + key));
|
|
163
|
-
|
|
162
|
+
box.appendChild(dom.createTextNode('Group: see above ' + key)); // TODO fix dependency cycle to solid-panes by calling outlineManager
|
|
163
|
+
// const plist = [$rdf.st(subject, ns.owl('sameAs'), subject)] // @@ need prev subject
|
|
164
|
+
// dom.outlineManager.appendPropertyTRs(box, plist)
|
|
165
|
+
// dom.appendChild(plist)
|
|
164
166
|
|
|
165
|
-
dom.outlineManager.appendPropertyTRs(box, plist);
|
|
166
167
|
return box;
|
|
167
168
|
}
|
|
168
169
|
|
|
@@ -591,7 +592,7 @@ _fieldFunction.field[ns.ui('Multiple').uri] = function (dom, container, already,
|
|
|
591
592
|
// delete button and move buttons
|
|
592
593
|
|
|
593
594
|
if (kb.updater.editable(dataDoc.uri)) {
|
|
594
|
-
buttons.deleteButtonWithCheck(dom, subField,
|
|
595
|
+
buttons.deleteButtonWithCheck(dom, subField, multipleUIlabel, deleteThisItem);
|
|
595
596
|
|
|
596
597
|
if (ordered) {
|
|
597
598
|
// Add controsl in a frame
|
|
@@ -642,7 +643,7 @@ _fieldFunction.field[ns.ui('Multiple').uri] = function (dom, container, already,
|
|
|
642
643
|
|
|
643
644
|
var _shim = dom.createElement('div');
|
|
644
645
|
|
|
645
|
-
_shim.appendChild(subField); // Subfield has its own
|
|
646
|
+
_shim.appendChild(subField); // Subfield has its own layout
|
|
646
647
|
|
|
647
648
|
|
|
648
649
|
frame.appendChild(_shim);
|
|
@@ -691,6 +692,8 @@ _fieldFunction.field[ns.ui('Multiple').uri] = function (dom, container, already,
|
|
|
691
692
|
return shim;
|
|
692
693
|
}
|
|
693
694
|
|
|
695
|
+
var multipleUIlabel = kb.any(form, ui('label'));
|
|
696
|
+
if (!multipleUIlabel) multipleUIlabel = utils.label(property);
|
|
694
697
|
var min = kb.any(form, ui('min')); // This is the minimum number -- default 0
|
|
695
698
|
|
|
696
699
|
min = min ? 0 + min.value : 0;
|
|
@@ -731,10 +734,9 @@ _fieldFunction.field[ns.ui('Multiple').uri] = function (dom, container, already,
|
|
|
731
734
|
img.setAttribute('src', plusIconURI); // plus sign
|
|
732
735
|
|
|
733
736
|
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
|
-
|
|
737
|
+
img.title = 'Click to add another ' + multipleUIlabel;
|
|
738
|
+
var prompt = dom.createElement('span');
|
|
739
|
+
prompt.textContent = (values.length === 0 ? 'Add another ' : 'Add ') + multipleUIlabel;
|
|
738
740
|
tail.addEventListener('click', /*#__PURE__*/function () {
|
|
739
741
|
var _ref3 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee5(_eventNotUsed) {
|
|
740
742
|
return _regenerator["default"].wrap(function _callee5$(_context5) {
|
|
@@ -756,6 +758,7 @@ _fieldFunction.field[ns.ui('Multiple').uri] = function (dom, container, already,
|
|
|
756
758
|
return _ref3.apply(this, arguments);
|
|
757
759
|
};
|
|
758
760
|
}(), true);
|
|
761
|
+
tail.appendChild(prompt);
|
|
759
762
|
}
|
|
760
763
|
|
|
761
764
|
function createListIfNecessary() {
|
|
@@ -1030,23 +1033,28 @@ _fieldFunction.field[ns.ui('Classifier').uri] = function (dom, container, alread
|
|
|
1030
1033
|
** -- radio buttons
|
|
1031
1034
|
** -- auto-complete typing
|
|
1032
1035
|
**
|
|
1033
|
-
**
|
|
1036
|
+
** TODO: according to ontology ui:choice can also have ns.ui('default') - this is not implemented yet
|
|
1034
1037
|
*/
|
|
1035
1038
|
|
|
1036
1039
|
|
|
1037
1040
|
_fieldFunction.field[ns.ui('Choice').uri] = function (dom, container, already, subject, form, dataDoc, callbackFunction) {
|
|
1038
1041
|
var ui = ns.ui;
|
|
1039
1042
|
var kb = _solidLogic.store;
|
|
1040
|
-
var multiple = false;
|
|
1041
1043
|
var formDoc = form.doc ? form.doc() : null; // @@ if blank no way to know
|
|
1042
1044
|
|
|
1045
|
+
var uiMultipleInUse = false; // this signals to ui:choice that it is part of a ui:multiple
|
|
1046
|
+
|
|
1047
|
+
var multiSelect = false;
|
|
1043
1048
|
var p;
|
|
1044
|
-
var box = dom.createElement('div');
|
|
1049
|
+
var box = dom.createElement('div');
|
|
1050
|
+
box.setAttribute('class', 'choiceBox'); // Set flexDirection column?
|
|
1045
1051
|
|
|
1046
1052
|
if (container) container.appendChild(box);
|
|
1047
1053
|
var lhs = dom.createElement('div');
|
|
1054
|
+
lhs.setAttribute('class', 'formFieldName choiceBox-label');
|
|
1048
1055
|
box.appendChild(lhs);
|
|
1049
1056
|
var rhs = dom.createElement('div');
|
|
1057
|
+
rhs.setAttribute('class', 'formFieldValue choiceBox-selectBox');
|
|
1050
1058
|
box.appendChild(rhs);
|
|
1051
1059
|
var property = kb.any(form, ui('property'));
|
|
1052
1060
|
|
|
@@ -1055,9 +1063,9 @@ _fieldFunction.field[ns.ui('Choice').uri] = function (dom, container, already, s
|
|
|
1055
1063
|
}
|
|
1056
1064
|
|
|
1057
1065
|
lhs.appendChild((0, _basic.fieldLabel)(dom, property, form));
|
|
1058
|
-
var
|
|
1066
|
+
var uiFrom = kb.any(form, ui('from'));
|
|
1059
1067
|
|
|
1060
|
-
if (!
|
|
1068
|
+
if (!uiFrom) {
|
|
1061
1069
|
return (0, _error.errorMessageBlock)(dom, "No 'from' for Choice: " + form);
|
|
1062
1070
|
}
|
|
1063
1071
|
|
|
@@ -1067,27 +1075,39 @@ _fieldFunction.field[ns.ui('Choice').uri] = function (dom, container, already, s
|
|
|
1067
1075
|
|
|
1068
1076
|
var possible = [];
|
|
1069
1077
|
var possibleProperties;
|
|
1070
|
-
var firstSelectOptionText = '* Select
|
|
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
|
+
}
|
|
1089
|
+
|
|
1071
1090
|
var opts = {
|
|
1072
1091
|
form: form,
|
|
1073
1092
|
subForm: subForm,
|
|
1074
|
-
|
|
1093
|
+
multiSelect: multiSelect,
|
|
1075
1094
|
firstSelectOptionText: firstSelectOptionText,
|
|
1095
|
+
uiMultipleInUse: uiMultipleInUse,
|
|
1076
1096
|
disambiguate: false
|
|
1077
1097
|
};
|
|
1078
|
-
possible = kb.each(undefined, ns.rdf('type'),
|
|
1098
|
+
possible = kb.each(undefined, ns.rdf('type'), uiFrom, formDoc);
|
|
1079
1099
|
|
|
1080
|
-
for (var x in kb.findMembersNT(
|
|
1100
|
+
for (var x in kb.findMembersNT(uiFrom)) {
|
|
1081
1101
|
possible.push(kb.fromNT(x));
|
|
1082
1102
|
} // Use rdfs
|
|
1083
1103
|
|
|
1084
1104
|
|
|
1085
|
-
if (
|
|
1105
|
+
if (uiFrom.sameTerm(ns.rdfs('Class'))) {
|
|
1086
1106
|
for (p in buttons.allClassURIs()) {
|
|
1087
1107
|
possible.push(kb.sym(p));
|
|
1088
1108
|
} // log.debug("%%% Choice field: possible.length 2 = "+possible.length)
|
|
1089
1109
|
|
|
1090
|
-
} else if (
|
|
1110
|
+
} else if (uiFrom.sameTerm(ns.rdf('Property'))) {
|
|
1091
1111
|
possibleProperties = buttons.propertyTriage(kb);
|
|
1092
1112
|
|
|
1093
1113
|
for (p in possibleProperties.op) {
|
|
@@ -1099,7 +1119,7 @@ _fieldFunction.field[ns.ui('Choice').uri] = function (dom, container, already, s
|
|
|
1099
1119
|
}
|
|
1100
1120
|
|
|
1101
1121
|
opts.disambiguate = true; // This is a big class, and the labels won't be enough.
|
|
1102
|
-
} else if (
|
|
1122
|
+
} else if (uiFrom.sameTerm(ns.owl('ObjectProperty'))) {
|
|
1103
1123
|
possibleProperties = buttons.propertyTriage(kb);
|
|
1104
1124
|
|
|
1105
1125
|
for (p in possibleProperties.op) {
|
|
@@ -1107,7 +1127,7 @@ _fieldFunction.field[ns.ui('Choice').uri] = function (dom, container, already, s
|
|
|
1107
1127
|
}
|
|
1108
1128
|
|
|
1109
1129
|
opts.disambiguate = true;
|
|
1110
|
-
} else if (
|
|
1130
|
+
} else if (uiFrom.sameTerm(ns.owl('DatatypeProperty'))) {
|
|
1111
1131
|
possibleProperties = buttons.propertyTriage(kb);
|
|
1112
1132
|
|
|
1113
1133
|
for (p in possibleProperties.dp) {
|
|
@@ -1117,13 +1137,13 @@ _fieldFunction.field[ns.ui('Choice').uri] = function (dom, container, already, s
|
|
|
1117
1137
|
opts.disambiguate = true;
|
|
1118
1138
|
}
|
|
1119
1139
|
|
|
1120
|
-
var sortedPossible = sortByLabel(possible); // TODO: this checks for any
|
|
1140
|
+
var sortedPossible = sortByLabel(possible); // TODO: this checks for any occurrence, regardless of true or false setting
|
|
1121
1141
|
|
|
1122
1142
|
if (kb.any(form, ui('canMintNew'))) {
|
|
1123
1143
|
opts.mint = '* Create new *'; // @@ could be better
|
|
1124
1144
|
}
|
|
1125
1145
|
|
|
1126
|
-
var selector = makeSelectForOptions(dom, kb, subject, property, sortedPossible, opts, dataDoc, callbackFunction);
|
|
1146
|
+
var selector = makeSelectForOptions(dom, kb, subject, property, sortedPossible, uiFrom, opts, dataDoc, callbackFunction);
|
|
1127
1147
|
rhs.appendChild(selector);
|
|
1128
1148
|
var object;
|
|
1129
1149
|
|
|
@@ -1135,7 +1155,7 @@ _fieldFunction.field[ns.ui('Choice').uri] = function (dom, container, already, s
|
|
|
1135
1155
|
|
|
1136
1156
|
if (object && subForm) {
|
|
1137
1157
|
removeNextSiblingsAfterElement(selector);
|
|
1138
|
-
|
|
1158
|
+
addSubFormChoice(dom, rhs, already, object, subForm, follow ? object.doc() : dataDoc, callbackFunction);
|
|
1139
1159
|
}
|
|
1140
1160
|
|
|
1141
1161
|
return box;
|
|
@@ -1153,7 +1173,7 @@ function removeNextSiblingsAfterElement(currentElement) {
|
|
|
1153
1173
|
}
|
|
1154
1174
|
}
|
|
1155
1175
|
|
|
1156
|
-
function
|
|
1176
|
+
function addSubFormChoice(dom, selectDiv, already, subject, subForm, dataDoc, callbackFunction) {
|
|
1157
1177
|
(0, _fieldFunction.fieldFunction)(dom, subForm)(dom, selectDiv, already, subject, subForm, dataDoc, callbackFunction);
|
|
1158
1178
|
} // Documentation - non-interactive fields
|
|
1159
1179
|
//
|
|
@@ -1358,7 +1378,8 @@ function promptForNew(dom, kb, subject, predicate, theClass, form, dataDoc, call
|
|
|
1358
1378
|
b.setAttribute('type', 'button');
|
|
1359
1379
|
b.setAttribute('style', 'float: right;');
|
|
1360
1380
|
b.innerHTML = 'Goto ' + utils.label(theClass);
|
|
1361
|
-
b.addEventListener('click',
|
|
1381
|
+
b.addEventListener('click', // TODO fix dependency cycle to solid-panes by calling outlineManager
|
|
1382
|
+
function (_e) {
|
|
1362
1383
|
dom.outlineManager.GotoSubject(theClass, true, undefined, true, undefined);
|
|
1363
1384
|
}, false);
|
|
1364
1385
|
return box;
|
|
@@ -1493,9 +1514,10 @@ function makeDescription(dom, kb, subject, predicate, dataDoc, callbackFunction)
|
|
|
1493
1514
|
// @param subject - a term, the subject of the statement(s) being edited.
|
|
1494
1515
|
// @param predicate - a term, the predicate of the statement(s) being edited
|
|
1495
1516
|
// @param possible - a list of terms, the possible value the object can take
|
|
1496
|
-
// @param options.
|
|
1517
|
+
// @param options.multiSelect - Boolean - Whether more than one at a time is allowed
|
|
1497
1518
|
// @param options.firstSelectOptionText - a string to be displayed as the
|
|
1498
|
-
// option for none selected (for non
|
|
1519
|
+
// option for none selected (for non multiSelect)
|
|
1520
|
+
// @param options.uiMultipleInUse - signals that the ui:choise is used with a ui:multiple
|
|
1499
1521
|
// @param options.mint - User may create thing if this sent to the prompt string eg "New foo"
|
|
1500
1522
|
// @param options.subForm - If mint, then the form to be used for minting the new thing
|
|
1501
1523
|
// @param dataDoc - The web document being edited
|
|
@@ -1503,7 +1525,7 @@ function makeDescription(dom, kb, subject, predicate, dataDoc, callbackFunction)
|
|
|
1503
1525
|
*/
|
|
1504
1526
|
|
|
1505
1527
|
|
|
1506
|
-
function makeSelectForOptions(dom, kb, subject, predicate, possible, options, dataDoc, callbackFunction) {
|
|
1528
|
+
function makeSelectForOptions(dom, kb, subject, predicate, possible, uiFrom, options, dataDoc, callbackFunction) {
|
|
1507
1529
|
log.debug('Select list length now ' + possible.length);
|
|
1508
1530
|
var n = 0;
|
|
1509
1531
|
var uris = {}; // Count them
|
|
@@ -1546,8 +1568,6 @@ function makeSelectForOptions(dom, kb, subject, predicate, possible, options, da
|
|
|
1546
1568
|
actual = getActual();
|
|
1547
1569
|
|
|
1548
1570
|
var onChange = function onChange(_e) {
|
|
1549
|
-
select.disabled = true; // until data written back - gives user feedback too
|
|
1550
|
-
|
|
1551
1571
|
var ds = [];
|
|
1552
1572
|
var is = [];
|
|
1553
1573
|
|
|
@@ -1563,9 +1583,29 @@ function makeSelectForOptions(dom, kb, subject, predicate, possible, options, da
|
|
|
1563
1583
|
var opt = select.options[_i];
|
|
1564
1584
|
|
|
1565
1585
|
if (opt.selected && opt.AJAR_mint) {
|
|
1566
|
-
|
|
1567
|
-
|
|
1568
|
-
|
|
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;
|
|
1569
1609
|
}
|
|
1570
1610
|
|
|
1571
1611
|
if (!opt.AJAR_uri) continue; // a prompt or mint
|
|
@@ -1573,6 +1613,7 @@ function makeSelectForOptions(dom, kb, subject, predicate, possible, options, da
|
|
|
1573
1613
|
if (opt.selected && !(opt.AJAR_uri in actual)) {
|
|
1574
1614
|
// new class
|
|
1575
1615
|
is.push($rdf.st(subject, predicate, kb.sym(opt.AJAR_uri), dataDoc));
|
|
1616
|
+
select.currentURI = opt.AJAR_uri;
|
|
1576
1617
|
}
|
|
1577
1618
|
|
|
1578
1619
|
if (opt.selected) select.currentURI = opt.AJAR_uri;
|
|
@@ -1592,40 +1633,29 @@ function makeSelectForOptions(dom, kb, subject, predicate, possible, options, da
|
|
|
1592
1633
|
sel = sel.superSelect;
|
|
1593
1634
|
}
|
|
1594
1635
|
|
|
1595
|
-
|
|
1596
|
-
callbackFunction(ok, {
|
|
1597
|
-
widget: 'select',
|
|
1598
|
-
event: 'new'
|
|
1599
|
-
});
|
|
1600
|
-
}
|
|
1636
|
+
log.info('selectForOptions: data doc = ' + dataDoc); // refresh subForm
|
|
1601
1637
|
|
|
1602
|
-
log.info('selectForOptions: data doc = ' + dataDoc);
|
|
1603
1638
|
removeNextSiblingsAfterElement(select);
|
|
1604
|
-
|
|
1605
|
-
kb.updater.update(ds, is, function (uri, ok, body) {
|
|
1606
|
-
actual = getActual(); // refresh
|
|
1607
|
-
|
|
1639
|
+
addSubFormChoice(dom, select.parentNode, {}, $rdf.sym(select.currentURI), options.subForm, dataDoc, function (ok, body) {
|
|
1608
1640
|
if (ok) {
|
|
1609
|
-
|
|
1610
|
-
|
|
1611
|
-
|
|
1612
|
-
|
|
1613
|
-
|
|
1614
|
-
|
|
1641
|
+
kb.updater.update(ds, is, function (uri, success, errorBody) {
|
|
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
|
+
});
|
|
1615
1650
|
} else {
|
|
1616
|
-
|
|
1651
|
+
select.parentNode.appendChild((0, _error.errorMessageBlock)(dom, 'Error updating data in field of select: ' + body));
|
|
1617
1652
|
}
|
|
1618
|
-
|
|
1619
|
-
if (callbackFunction) callbackFunction(ok, {
|
|
1620
|
-
widget: 'select',
|
|
1621
|
-
event: 'change'
|
|
1622
|
-
});
|
|
1623
1653
|
});
|
|
1624
1654
|
};
|
|
1625
1655
|
|
|
1626
1656
|
var select = dom.createElement('select');
|
|
1627
1657
|
select.setAttribute('style', style.formSelectSTyle);
|
|
1628
|
-
if (options.
|
|
1658
|
+
if (options.multiSelect) select.setAttribute('multiSelect', 'true');
|
|
1629
1659
|
select.currentURI = null;
|
|
1630
1660
|
|
|
1631
1661
|
select.refresh = function () {
|
|
@@ -1676,13 +1706,13 @@ function makeSelectForOptions(dom, kb, subject, predicate, possible, options, da
|
|
|
1676
1706
|
select.insertBefore(mint, select.firstChild);
|
|
1677
1707
|
}
|
|
1678
1708
|
|
|
1679
|
-
if (!select.currentURI &&
|
|
1709
|
+
if (!select.currentURI && options.uiMultipleInUse) {
|
|
1680
1710
|
var prompt = dom.createElement('option');
|
|
1681
1711
|
prompt.appendChild(dom.createTextNode(options.firstSelectOptionText));
|
|
1682
|
-
prompt.selected = true;
|
|
1683
1712
|
prompt.disabled = true;
|
|
1684
1713
|
prompt.value = true;
|
|
1685
1714
|
prompt.hidden = true;
|
|
1715
|
+
prompt.selected = true;
|
|
1686
1716
|
select.insertBefore(prompt, select.firstChild);
|
|
1687
1717
|
}
|
|
1688
1718
|
|
|
@@ -1702,11 +1732,11 @@ function makeSelectForOptions(dom, kb, subject, predicate, possible, options, da
|
|
|
1702
1732
|
function makeSelectForCategory(dom, kb, subject, category, dataDoc, callbackFunction) {
|
|
1703
1733
|
var du = kb.any(category, ns.owl('disjointUnionOf'));
|
|
1704
1734
|
var subs;
|
|
1705
|
-
var
|
|
1735
|
+
var multiSelect = false;
|
|
1706
1736
|
|
|
1707
1737
|
if (!du) {
|
|
1708
1738
|
subs = kb.each(undefined, ns.rdfs('subClassOf'), category);
|
|
1709
|
-
|
|
1739
|
+
multiSelect = true;
|
|
1710
1740
|
} else {
|
|
1711
1741
|
subs = du.elements;
|
|
1712
1742
|
}
|
|
@@ -1714,15 +1744,15 @@ function makeSelectForCategory(dom, kb, subject, category, dataDoc, callbackFunc
|
|
|
1714
1744
|
log.debug('Select list length ' + subs.length);
|
|
1715
1745
|
|
|
1716
1746
|
if (subs.length === 0) {
|
|
1717
|
-
return (0, _error.errorMessageBlock)(dom, "Can't do " + (
|
|
1747
|
+
return (0, _error.errorMessageBlock)(dom, "Can't do " + (multiSelect ? 'multiple ' : '') + 'selector with no subclasses of category: ' + category);
|
|
1718
1748
|
}
|
|
1719
1749
|
|
|
1720
1750
|
if (subs.length === 1) {
|
|
1721
|
-
return (0, _error.errorMessageBlock)(dom, "Can't do " + (
|
|
1751
|
+
return (0, _error.errorMessageBlock)(dom, "Can't do " + (multiSelect ? 'multiple ' : '') + 'selector with only 1 subclass of category: ' + category + ':' + subs[1]);
|
|
1722
1752
|
}
|
|
1723
1753
|
|
|
1724
|
-
return makeSelectForOptions(dom, kb, subject, ns.rdf('type'), subs, {
|
|
1725
|
-
|
|
1754
|
+
return makeSelectForOptions(dom, kb, subject, ns.rdf('type'), subs, null, {
|
|
1755
|
+
multiSelect: multiSelect
|
|
1726
1756
|
}, dataDoc, callbackFunction);
|
|
1727
1757
|
}
|
|
1728
1758
|
/** Make SELECT element to select subclasses recurively
|