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.
@@ -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
- var plist = [$rdf.st(subject, ns.owl('sameAs'), subject)]; // @@ need prev subject
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, utils.label(property), deleteThisItem);
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 laytout
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 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
-
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
- ** Todo: Deal with multiple. Maybe merge with multiple code.
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'); // Set flexDirection column?
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 from = kb.any(form, ui('from'));
1066
+ var uiFrom = kb.any(form, ui('from'));
1059
1067
 
1060
- if (!from) {
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 from ' + utils.label(subject, true) + ' *';
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
- multiple: multiple,
1093
+ multiSelect: multiSelect,
1075
1094
  firstSelectOptionText: firstSelectOptionText,
1095
+ uiMultipleInUse: uiMultipleInUse,
1076
1096
  disambiguate: false
1077
1097
  };
1078
- possible = kb.each(undefined, ns.rdf('type'), from, formDoc);
1098
+ possible = kb.each(undefined, ns.rdf('type'), uiFrom, formDoc);
1079
1099
 
1080
- for (var x in kb.findMembersNT(from)) {
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 (from.sameTerm(ns.rdfs('Class'))) {
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 (from.sameTerm(ns.rdf('Property'))) {
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 (from.sameTerm(ns.owl('ObjectProperty'))) {
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 (from.sameTerm(ns.owl('DatatypeProperty'))) {
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 occurance regardles if it is set to true or false
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
- addSubFormDropDown(dom, rhs, already, object, subForm, follow ? object.doc() : dataDoc, callbackFunction);
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 addSubFormDropDown(dom, selectDiv, already, subject, subForm, dataDoc, callbackFunction) {
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', function (_e) {
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.multiple - Boolean - Whether more than one at a time is allowed
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 multiple)
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
- newObject = newThing(dataDoc);
1567
- removeNextSiblingsAfterElement(select);
1568
- addSubFormDropDown(dom, select.parentNode, {}, $rdf.sym(newObject), options.subForm, dataDoc, callbackFunction);
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
- function doneNew(ok, _body) {
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
- addSubFormDropDown(dom, select.parentNode, {}, $rdf.sym(select.currentURI), options.subForm, dataDoc, callbackFunction);
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
- if (newObject) {
1610
- removeNextSiblingsAfterElement(select);
1611
- addSubFormDropDown(dom, select.parentNode, {}, newObject, options.subForm, dataDoc, doneNew);
1612
- }
1613
-
1614
- select.disabled = false; // data written back
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
- return select.parentNode.appendChild((0, _error.errorMessageBlock)(dom, 'Error updating data in select: ' + body));
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.multiple) select.setAttribute('multiple', 'true');
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 && !options.multiple) {
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 multiple = false;
1735
+ var multiSelect = false;
1706
1736
 
1707
1737
  if (!du) {
1708
1738
  subs = kb.each(undefined, ns.rdfs('subClassOf'), category);
1709
- multiple = true;
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 " + (multiple ? 'multiple ' : '') + 'selector with no subclasses of category: ' + category);
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 " + (multiple ? 'multiple ' : '') + 'selector with only 1 subclass of category: ' + category + ':' + subs[1]);
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
- multiple: multiple
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