solid-ui 2.4.22-3e0d1a42 → 2.4.22-4485d5d9

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 CHANGED
@@ -15172,7 +15172,7 @@ function slice(s, suffix) {
15172
15172
 
15173
15173
  function getWellKnownLabel(thing) {
15174
15174
  return _solidLogic.store.any(thing, UI.ns.ui('label')) || // Prioritize ui:label
15175
- _solidLogic.store.any(thing, UI.ns.link('message')) || _solidLogic.store.any(thing, UI.ns.vcard('fn')) || _solidLogic.store.any(thing, UI.ns.foaf('name')) || _solidLogic.store.any(thing, UI.ns.dct('title')) || _solidLogic.store.any(thing, UI.ns.dc('title')) || _solidLogic.store.any(thing, UI.ns.rss('title')) || _solidLogic.store.any(thing, UI.ns.contact('fullName')) || _solidLogic.store.any(thing, _solidLogic.store.sym('http://www.w3.org/2001/04/roadmap/org#name')) || _solidLogic.store.any(thing, UI.ns.cal('summary')) || _solidLogic.store.any(thing, UI.ns.foaf('nick')) || _solidLogic.store.any(thing, UI.ns.as('name')) || _solidLogic.store.any(thing, UI.ns.schema('name')) || _solidLogic.store.any(thing, UI.ns.rdfs('label'));
15175
+ _solidLogic.store.any(thing, UI.ns.link('message')) || _solidLogic.store.any(thing, UI.ns.vcard('fn')) || _solidLogic.store.any(thing, UI.ns.foaf('name')) || _solidLogic.store.any(thing, UI.ns.dct('title')) || _solidLogic.store.any(thing, UI.ns.dc('title')) || _solidLogic.store.any(thing, UI.ns.rss('title')) || _solidLogic.store.any(thing, UI.ns.contact('fullName')) || _solidLogic.store.any(thing, _solidLogic.store.sym('http://www.w3.org/2001/04/roadmap/org#name')) || _solidLogic.store.any(thing, UI.ns.cal('summary')) || _solidLogic.store.any(thing, UI.ns.foaf('nick')) || _solidLogic.store.any(thing, UI.ns.as('name')) || _solidLogic.store.any(thing, UI.ns.schema('name')) || _solidLogic.store.any(thing, UI.ns.rdfs('label')) || _solidLogic.store.any(thing, _solidLogic.store.sym('http://www.w3.org/2004/02/skos/core#prefLabel'));
15176
15176
  }
15177
15177
  //# sourceMappingURL=label.js.map
15178
15178
 
@@ -15192,11 +15192,11 @@ Object.defineProperty(exports, "__esModule", ({
15192
15192
  }));
15193
15193
  exports.versionInfo = void 0;
15194
15194
  var versionInfo = {
15195
- buildTime: '2022-05-10T17:01:23Z',
15196
- commit: '3e0d1a42e042cb5542cbc183d7ae53eec6498254',
15195
+ buildTime: '2022-05-20T08:02:01Z',
15196
+ commit: '4485d5d9aa24db1f33b7a2a1441a868b72cfa617',
15197
15197
  npmInfo: {
15198
15198
  'solid-ui': '2.4.22',
15199
- npm: '6.14.16',
15199
+ npm: '6.14.17',
15200
15200
  ares: '1.18.1',
15201
15201
  brotli: '1.0.9',
15202
15202
  cldr: '40.0',
@@ -15205,12 +15205,12 @@ var versionInfo = {
15205
15205
  modules: '83',
15206
15206
  napi: '8',
15207
15207
  nghttp2: '1.42.0',
15208
- node: '14.19.1',
15208
+ node: '14.19.2',
15209
15209
  openssl: '1.1.1n',
15210
15210
  tz: '2021a3',
15211
15211
  unicode: '14.0',
15212
15212
  uv: '1.42.0',
15213
- v8: '8.4.371.23-node.85',
15213
+ v8: '8.4.371.23-node.87',
15214
15214
  zlib: '1.2.11'
15215
15215
  }
15216
15216
  };
@@ -16280,6 +16280,7 @@ function openHrefInOutlineMode(e) {
16280
16280
 
16281
16281
  if (dom.outlineManager) {
16282
16282
  // @@ TODO Remove the use of document as a global object
16283
+ // TODO fix dependency cycle to solid-panes by calling outlineManager
16283
16284
  ;
16284
16285
  dom.outlineManager.GotoSubject(_solidLogic.store.sym(uri), true, undefined, true, undefined);
16285
16286
  } else if (window && window.panes && window.panes.getOutliner) {
@@ -16407,6 +16408,7 @@ function linkButton(dom, object) {
16407
16408
  b.textContent = 'Goto ' + utils.label(object);
16408
16409
  b.addEventListener('click', function (_event) {
16409
16410
  // b.parentNode.removeChild(b)
16411
+ // TODO fix dependency cycle to solid-panes by calling outlineManager
16410
16412
  ;
16411
16413
  dom.outlineManager.GotoSubject(object, true, undefined, true, undefined);
16412
16414
  }, true);
@@ -17147,6 +17149,7 @@ exports.findClosest = findClosest;
17147
17149
  exports.formsFor = formsFor;
17148
17150
  exports.makeDescription = makeDescription;
17149
17151
  exports.makeSelectForCategory = makeSelectForCategory;
17152
+ exports.makeSelectForChoice = makeSelectForChoice;
17150
17153
  exports.makeSelectForNestedCategory = makeSelectForNestedCategory;
17151
17154
  exports.makeSelectForOptions = makeSelectForOptions;
17152
17155
  exports.newButton = newButton;
@@ -17258,14 +17261,16 @@ _fieldFunction.field[ns.ui('Form').uri] = _fieldFunction.field[ns.ui('Group').ur
17258
17261
  var ui = ns.ui;
17259
17262
  if (container) container.appendChild(box); // Prevent loops
17260
17263
 
17264
+ if (!form) return;
17261
17265
  var key = subject.toNT() + '|' + form.toNT();
17262
17266
 
17263
17267
  if (already[key]) {
17264
17268
  // been there done that
17265
- box.appendChild(dom.createTextNode('Group: see above ' + key));
17266
- var plist = [$rdf.st(subject, ns.owl('sameAs'), subject)]; // @@ need prev subject
17269
+ box.appendChild(dom.createTextNode('Group: see above ' + key)); // TODO fix dependency cycle to solid-panes by calling outlineManager
17270
+ // const plist = [$rdf.st(subject, ns.owl('sameAs'), subject)] // @@ need prev subject
17271
+ // dom.outlineManager.appendPropertyTRs(box, plist)
17272
+ // dom.appendChild(plist)
17267
17273
 
17268
- dom.outlineManager.appendPropertyTRs(box, plist);
17269
17274
  return box;
17270
17275
  }
17271
17276
 
@@ -17366,47 +17371,43 @@ _fieldFunction.field[ns.ui('Options').uri] = function (dom, container, already,
17366
17371
  values = kb.each(subject, dependingOn);
17367
17372
  }
17368
17373
 
17369
- if (values.length === 0) {
17370
- box.appendChild((0, _error.errorMessageBlock)(dom, "Can't select subform as no value of: " + dependingOn));
17371
- } else {
17372
- for (var i = 0; i < cases.length; i++) {
17373
- var c = cases[i];
17374
- var tests = kb.each(c, ui('for'), null, formDoc); // There can be multiple 'for'
17374
+ for (var i = 0; i < cases.length; i++) {
17375
+ var c = cases[i];
17376
+ var tests = kb.each(c, ui('for'), null, formDoc); // There can be multiple 'for'
17375
17377
 
17376
- var match = false;
17378
+ var match = false;
17377
17379
 
17378
- for (var j = 0; j < tests.length; j++) {
17379
- var _iterator = _createForOfIteratorHelper(values),
17380
- _step;
17380
+ for (var j = 0; j < tests.length; j++) {
17381
+ var _iterator = _createForOfIteratorHelper(values),
17382
+ _step;
17381
17383
 
17382
- try {
17383
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
17384
- var value = _step.value;
17385
- var test = tests[j];
17384
+ try {
17385
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
17386
+ var value = _step.value;
17387
+ var test = tests[j];
17386
17388
 
17387
- if (value.sameTerm(tests) || value.termType === test.termType && value.value === test.value) {
17388
- match = true;
17389
- }
17389
+ if (value.sameTerm(tests) || value.termType === test.termType && value.value === test.value) {
17390
+ match = true;
17390
17391
  }
17391
- } catch (err) {
17392
- _iterator.e(err);
17393
- } finally {
17394
- _iterator.f();
17395
17392
  }
17393
+ } catch (err) {
17394
+ _iterator.e(err);
17395
+ } finally {
17396
+ _iterator.f();
17396
17397
  }
17398
+ }
17397
17399
 
17398
- if (match) {
17399
- var _field3 = kb.the(c, ui('use'));
17400
-
17401
- if (!_field3) {
17402
- box.appendChild((0, _error.errorMessageBlock)(dom, 'No "use" part for case in form ' + form));
17403
- return box;
17404
- } else {
17405
- appendForm(dom, box, already, subject, _field3, dataDoc, callbackFunction);
17406
- }
17400
+ if (match) {
17401
+ var _field3 = kb.the(c, ui('use'));
17407
17402
 
17408
- break;
17403
+ if (!_field3) {
17404
+ box.appendChild((0, _error.errorMessageBlock)(dom, 'No "use" part for case in form ' + form));
17405
+ return box;
17406
+ } else {
17407
+ appendForm(dom, box, already, subject, _field3, dataDoc, callbackFunction);
17409
17408
  }
17409
+
17410
+ break;
17410
17411
  }
17411
17412
  } // @@ Add box.refresh() to sync fields with values
17412
17413
 
@@ -17795,8 +17796,7 @@ _fieldFunction.field[ns.ui('Multiple').uri] = function (dom, container, already,
17795
17796
  }
17796
17797
 
17797
17798
  var multipleUIlabel = kb.any(form, ui('label'));
17798
- if (!multipleUIlabel) multipleUIlabel = utils.label(property, true); // Init capital
17799
-
17799
+ if (!multipleUIlabel) multipleUIlabel = utils.label(property);
17800
17800
  var min = kb.any(form, ui('min')); // This is the minimum number -- default 0
17801
17801
 
17802
17802
  min = min ? 0 + min.value : 0;
@@ -18136,6 +18136,7 @@ _fieldFunction.field[ns.ui('Classifier').uri] = function (dom, container, alread
18136
18136
  ** -- radio buttons
18137
18137
  ** -- auto-complete typing
18138
18138
  **
18139
+ ** TODO: according to ontology ui:choice can also have ns.ui('default') - this is not implemented yet
18139
18140
  */
18140
18141
 
18141
18142
 
@@ -18144,8 +18145,6 @@ _fieldFunction.field[ns.ui('Choice').uri] = function (dom, container, already, s
18144
18145
  var kb = _solidLogic.store;
18145
18146
  var formDoc = form.doc ? form.doc() : null; // @@ if blank no way to know
18146
18147
 
18147
- var uiMultipleInUse = false; // this signals to ui:choice that it is part of a ui:multiple
18148
-
18149
18148
  var multiSelect = false;
18150
18149
  var p;
18151
18150
  var box = dom.createElement('div');
@@ -18175,87 +18174,77 @@ _fieldFunction.field[ns.ui('Choice').uri] = function (dom, container, already, s
18175
18174
 
18176
18175
  var follow = kb.anyJS(form, ui('follow'), null, formDoc); // data doc moves to new subject?
18177
18176
 
18178
- var possible = [];
18179
- var possibleProperties;
18180
- var firstSelectOptionText = '* Select for ' + utils.label(subject, true) + ' *'; // if we do NOT have a container it means it is a ui:Multiple
18181
- // only important for the first option text in select
18182
-
18183
- if (!container) {
18184
- uiMultipleInUse = true;
18185
- firstSelectOptionText = utils.label(subject, true);
18186
- }
18187
-
18188
18177
  var opts = {
18189
18178
  form: form,
18190
18179
  subForm: subForm,
18191
18180
  multiSelect: multiSelect,
18192
- firstSelectOptionText: firstSelectOptionText,
18193
- uiMultipleInUse: uiMultipleInUse,
18194
18181
  disambiguate: false
18195
18182
  };
18196
- possible = kb.each(undefined, ns.rdf('type'), uiFrom, formDoc);
18197
18183
 
18198
- for (var x in kb.findMembersNT(uiFrom)) {
18199
- possible.push(kb.fromNT(x));
18200
- } // Use rdfs
18184
+ function getSelectorOptions() {
18185
+ var possible = [];
18186
+ var possibleProperties;
18187
+ possible = kb.each(undefined, ns.rdf('type'), uiFrom, formDoc);
18201
18188
 
18189
+ for (var x in kb.findMembersNT(uiFrom)) {
18190
+ possible.push(kb.fromNT(x));
18191
+ } // Use rdfs
18202
18192
 
18203
- if (uiFrom.sameTerm(ns.rdfs('Class'))) {
18204
- for (p in buttons.allClassURIs()) {
18205
- possible.push(kb.sym(p));
18206
- } // log.debug("%%% Choice field: possible.length 2 = "+possible.length)
18207
18193
 
18208
- } else if (uiFrom.sameTerm(ns.rdf('Property'))) {
18209
- possibleProperties = buttons.propertyTriage(kb);
18194
+ if (uiFrom.sameTerm(ns.rdfs('Class'))) {
18195
+ for (p in buttons.allClassURIs()) {
18196
+ possible.push(kb.sym(p));
18197
+ } // log.debug("%%% Choice field: possible.length 2 = "+possible.length)
18210
18198
 
18211
- for (p in possibleProperties.op) {
18212
- possible.push(kb.fromNT(p));
18213
- }
18199
+ } else if (uiFrom.sameTerm(ns.rdf('Property'))) {
18200
+ possibleProperties = buttons.propertyTriage(kb);
18214
18201
 
18215
- for (p in possibleProperties.dp) {
18216
- possible.push(kb.fromNT(p));
18217
- }
18202
+ for (p in possibleProperties.op) {
18203
+ possible.push(kb.fromNT(p));
18204
+ }
18218
18205
 
18219
- opts.disambiguate = true; // This is a big class, and the labels won't be enough.
18220
- } else if (uiFrom.sameTerm(ns.owl('ObjectProperty'))) {
18221
- possibleProperties = buttons.propertyTriage(kb);
18206
+ for (p in possibleProperties.dp) {
18207
+ possible.push(kb.fromNT(p));
18208
+ }
18222
18209
 
18223
- for (p in possibleProperties.op) {
18224
- possible.push(kb.fromNT(p));
18225
- }
18210
+ opts.disambiguate = true; // This is a big class, and the labels won't be enough.
18211
+ } else if (uiFrom.sameTerm(ns.owl('ObjectProperty'))) {
18212
+ possibleProperties = buttons.propertyTriage(kb);
18213
+
18214
+ for (p in possibleProperties.op) {
18215
+ possible.push(kb.fromNT(p));
18216
+ }
18226
18217
 
18227
- opts.disambiguate = true;
18228
- } else if (uiFrom.sameTerm(ns.owl('DatatypeProperty'))) {
18229
- possibleProperties = buttons.propertyTriage(kb);
18218
+ opts.disambiguate = true;
18219
+ } else if (uiFrom.sameTerm(ns.owl('DatatypeProperty'))) {
18220
+ possibleProperties = buttons.propertyTriage(kb);
18230
18221
 
18231
- for (p in possibleProperties.dp) {
18232
- possible.push(kb.fromNT(p));
18222
+ for (p in possibleProperties.dp) {
18223
+ possible.push(kb.fromNT(p));
18224
+ }
18225
+
18226
+ opts.disambiguate = true;
18233
18227
  }
18234
18228
 
18235
- opts.disambiguate = true;
18236
- }
18229
+ return sortByLabel(possible);
18230
+ } // TODO: this checks for any occurrence, regardless of true or false setting
18237
18231
 
18238
- var sortedPossible = sortByLabel(possible); // TODO: this checks for any occurrence, regardless of true or false setting
18239
18232
 
18240
18233
  if (kb.any(form, ui('canMintNew'))) {
18241
18234
  opts.mint = '* Create new *'; // @@ could be better
18242
18235
  }
18243
18236
 
18244
- var selector = makeSelectForOptions(dom, kb, subject, property, sortedPossible, uiFrom, opts, dataDoc, callbackFunction);
18245
- rhs.appendChild(selector);
18246
- var object;
18237
+ var selector;
18247
18238
 
18248
- if (selector.currentURI) {
18249
- object = $rdf.sym(selector.currentURI);
18250
- } else {
18251
- object = kb.any(subject, property);
18252
- }
18253
-
18254
- if (object && subForm) {
18255
- removeNextSiblingsAfterElement(selector);
18256
- addSubFormChoice(dom, rhs, already, object, subForm, follow ? object.doc() : dataDoc, callbackFunction);
18257
- }
18239
+ rhs.refresh = function () {
18240
+ var selectorOptions = getSelectorOptions();
18241
+ selector = makeSelectForChoice(dom, rhs, kb, subject, property, selectorOptions, uiFrom, opts, dataDoc, callbackFunction);
18242
+ rhs.innerHTML = '';
18243
+ rhs.appendChild(selector);
18244
+ };
18258
18245
 
18246
+ rhs.refresh();
18247
+ if (selector && selector.refresh) selector.refresh();
18259
18248
  return box;
18260
18249
  };
18261
18250
  /**
@@ -18476,7 +18465,8 @@ function promptForNew(dom, kb, subject, predicate, theClass, form, dataDoc, call
18476
18465
  b.setAttribute('type', 'button');
18477
18466
  b.setAttribute('style', 'float: right;');
18478
18467
  b.innerHTML = 'Goto ' + utils.label(theClass);
18479
- b.addEventListener('click', function (_e) {
18468
+ b.addEventListener('click', // TODO fix dependency cycle to solid-panes by calling outlineManager
18469
+ function (_e) {
18480
18470
  dom.outlineManager.GotoSubject(theClass, true, undefined, true, undefined);
18481
18471
  }, false);
18482
18472
  return box;
@@ -18611,18 +18601,15 @@ function makeDescription(dom, kb, subject, predicate, dataDoc, callbackFunction)
18611
18601
  // @param subject - a term, the subject of the statement(s) being edited.
18612
18602
  // @param predicate - a term, the predicate of the statement(s) being edited
18613
18603
  // @param possible - a list of terms, the possible value the object can take
18614
- // @param options.multiSelect - Boolean - Whether more than one at a time is allowed
18615
- // @param options.firstSelectOptionText - a string to be displayed as the
18616
- // option for none selected (for non multiSelect)
18617
- // @param options.uiMultipleInUse - signals that the ui:choise is used with a ui:multiple
18618
- // @param options.mint - User may create thing if this sent to the prompt string eg "New foo"
18604
+ // @param options.nullLabel - a string to be displayed as the
18605
+ // option for none selected (for non multiple)
18619
18606
  // @param options.subForm - If mint, then the form to be used for minting the new thing
18620
18607
  // @param dataDoc - The web document being edited
18621
18608
  // @param callbackFunction - takes (boolean ok, string errorBody)
18622
18609
  */
18623
18610
 
18624
18611
 
18625
- function makeSelectForOptions(dom, kb, subject, predicate, possible, uiFrom, options, dataDoc, callbackFunction) {
18612
+ function makeSelectForOptions(dom, kb, subject, predicate, possible, options, dataDoc, callbackFunction) {
18626
18613
  log.debug('Select list length now ' + possible.length);
18627
18614
  var n = 0;
18628
18615
  var uris = {}; // Count them
@@ -18639,7 +18626,7 @@ function makeSelectForOptions(dom, kb, subject, predicate, possible, uiFrom, opt
18639
18626
  } // uris is now the set of possible options
18640
18627
 
18641
18628
 
18642
- if (n === 0 && !options.mint) {
18629
+ if (n === 0) {
18643
18630
  return (0, _error.errorMessageBlock)(dom, "Can't do selector with no options, subject= " + subject + ' property = ' + predicate + '.');
18644
18631
  }
18645
18632
 
@@ -18665,6 +18652,8 @@ function makeSelectForOptions(dom, kb, subject, predicate, possible, uiFrom, opt
18665
18652
  actual = getActual();
18666
18653
 
18667
18654
  var onChange = function onChange(_e) {
18655
+ select.disabled = true; // until data written back - gives user feedback too
18656
+
18668
18657
  var ds = [];
18669
18658
  var is = [];
18670
18659
 
@@ -18674,43 +18663,18 @@ function makeSelectForOptions(dom, kb, subject, predicate, possible, uiFrom, opt
18674
18663
  }
18675
18664
  };
18676
18665
 
18677
- var newObject;
18678
-
18679
18666
  for (var _i = 0; _i < select.options.length; _i++) {
18680
18667
  var opt = select.options[_i];
18681
-
18682
- if (opt.selected && opt.AJAR_mint) {
18683
- // not sure if this 'if' is used because I cannot find mintClass
18684
- if (options.mintClass) {
18685
- var thisForm = promptForNew(dom, kb, subject, predicate, options.mintClass, null, dataDoc, function (ok, body) {
18686
- if (!ok) {
18687
- callbackFunction(ok, body, {
18688
- change: 'new'
18689
- }); // @@ if ok, need some form of refresh of the select for the new thing
18690
- }
18691
- });
18692
- select.parentNode.appendChild(thisForm);
18693
- newObject = thisForm.AJAR_subject;
18694
- } else {
18695
- newObject = newThing(dataDoc);
18696
- }
18697
-
18698
- is.push($rdf.st(subject, predicate, kb.sym(newObject), dataDoc));
18699
- 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
18700
-
18701
- if (options.mintStatementsFun) {
18702
- is = is.concat(options.mintStatementsFun(newObject));
18703
- }
18704
-
18705
- select.currentURI = newObject;
18706
- }
18707
-
18708
18668
  if (!opt.AJAR_uri) continue; // a prompt or mint
18709
18669
 
18710
18670
  if (opt.selected && !(opt.AJAR_uri in actual)) {
18711
18671
  // new class
18712
18672
  is.push($rdf.st(subject, predicate, kb.sym(opt.AJAR_uri), dataDoc));
18713
- select.currentURI = opt.AJAR_uri;
18673
+ }
18674
+
18675
+ if (!opt.selected && opt.AJAR_uri in actual) {
18676
+ // old class
18677
+ removeValue(kb.sym(opt.AJAR_uri));
18714
18678
  }
18715
18679
 
18716
18680
  if (opt.selected) select.currentURI = opt.AJAR_uri;
@@ -18730,29 +18694,25 @@ function makeSelectForOptions(dom, kb, subject, predicate, possible, uiFrom, opt
18730
18694
  sel = sel.superSelect;
18731
18695
  }
18732
18696
 
18733
- log.info('selectForOptions: data doc = ' + dataDoc); // refresh subForm
18697
+ log.info('selectForOptions: data doc = ' + dataDoc);
18698
+ kb.updater.update(ds, is, function (uri, ok, body) {
18699
+ actual = getActual(); // refresh
18734
18700
 
18735
- removeNextSiblingsAfterElement(select);
18736
- addSubFormChoice(dom, select.parentNode, {}, $rdf.sym(select.currentURI), options.subForm, dataDoc, function (ok, body) {
18737
18701
  if (ok) {
18738
- kb.updater.update(ds, is, function (uri, success, errorBody) {
18739
- actual = getActual(); // refresh
18740
-
18741
- if (!success) select.parentNode.appendChild((0, _error.errorMessageBlock)(dom, 'Error updating select: ' + errorBody));
18742
- });
18743
- if (callbackFunction) callbackFunction(ok, {
18744
- widget: 'select',
18745
- event: 'new'
18746
- });
18702
+ select.disabled = false; // data written back
18747
18703
  } else {
18748
- select.parentNode.appendChild((0, _error.errorMessageBlock)(dom, 'Error updating data in field of select: ' + body));
18704
+ return select.parentNode.appendChild((0, _error.errorMessageBlock)(dom, 'Error updating data in select: ' + body));
18749
18705
  }
18706
+
18707
+ if (callbackFunction) callbackFunction(ok, {
18708
+ widget: 'select',
18709
+ event: 'change'
18710
+ });
18750
18711
  });
18751
18712
  };
18752
18713
 
18753
18714
  var select = dom.createElement('select');
18754
18715
  select.setAttribute('style', style.formSelectSTyle);
18755
- if (options.multiSelect) select.setAttribute('multiSelect', 'true');
18756
18716
  select.currentURI = null;
18757
18717
 
18758
18718
  select.refresh = function () {
@@ -18795,22 +18755,11 @@ function makeSelectForOptions(dom, kb, subject, predicate, possible, uiFrom, opt
18795
18755
  select.appendChild(option);
18796
18756
  }
18797
18757
 
18798
- if (editable && options.mint) {
18799
- var mint = dom.createElement('option');
18800
- mint.appendChild(dom.createTextNode(options.mint));
18801
- mint.AJAR_mint = true; // Flag it
18802
-
18803
- select.insertBefore(mint, select.firstChild);
18804
- }
18805
-
18806
- if (!select.currentURI && options.uiMultipleInUse) {
18758
+ if (!select.currentURI) {
18807
18759
  var prompt = dom.createElement('option');
18808
- prompt.appendChild(dom.createTextNode(options.firstSelectOptionText));
18809
- prompt.disabled = true;
18810
- prompt.value = true;
18811
- prompt.hidden = true;
18812
- prompt.selected = true;
18760
+ prompt.appendChild(dom.createTextNode(options.nullLabel));
18813
18761
  select.insertBefore(prompt, select.firstChild);
18762
+ prompt.selected = true;
18814
18763
  }
18815
18764
 
18816
18765
  if (editable) {
@@ -18829,27 +18778,16 @@ function makeSelectForOptions(dom, kb, subject, predicate, possible, uiFrom, opt
18829
18778
  function makeSelectForCategory(dom, kb, subject, category, dataDoc, callbackFunction) {
18830
18779
  var du = kb.any(category, ns.owl('disjointUnionOf'));
18831
18780
  var subs;
18832
- var multiSelect = false;
18833
18781
 
18834
18782
  if (!du) {
18835
18783
  subs = kb.each(undefined, ns.rdfs('subClassOf'), category);
18836
- multiSelect = true;
18837
18784
  } else {
18838
18785
  subs = du.elements;
18839
18786
  }
18840
18787
 
18841
18788
  log.debug('Select list length ' + subs.length);
18842
-
18843
- if (subs.length === 0) {
18844
- return (0, _error.errorMessageBlock)(dom, "Can't do " + (multiSelect ? 'multiple ' : '') + 'selector with no subclasses of category: ' + category);
18845
- }
18846
-
18847
- if (subs.length === 1) {
18848
- return (0, _error.errorMessageBlock)(dom, "Can't do " + (multiSelect ? 'multiple ' : '') + 'selector with only 1 subclass of category: ' + category + ':' + subs[1]);
18849
- }
18850
-
18851
- return makeSelectForOptions(dom, kb, subject, ns.rdf('type'), subs, null, {
18852
- multiSelect: multiSelect
18789
+ return makeSelectForOptions(dom, kb, subject, ns.rdf('type'), subs, {
18790
+ nullLabel: '* Select type *'
18853
18791
  }, dataDoc, callbackFunction);
18854
18792
  }
18855
18793
  /** Make SELECT element to select subclasses recurively
@@ -18883,8 +18821,7 @@ function makeSelectForNestedCategory(dom, kb, subject, category, dataDoc, callba
18883
18821
  function onChange(ok, body) {
18884
18822
  if (ok) update();
18885
18823
  callbackFunction(ok, body);
18886
- } // eslint-disable-next-line prefer-const
18887
-
18824
+ }
18888
18825
 
18889
18826
  var select = makeSelectForCategory(dom, kb, subject, category, dataDoc, onChange);
18890
18827
  container.appendChild(select);
@@ -19039,6 +18976,199 @@ function newThing(doc) {
19039
18976
  var now = new Date();
19040
18977
  return $rdf.sym(doc.uri + '#' + 'id' + ('' + now.getTime()));
19041
18978
  }
18979
+ /** Make SELECT element to select options
18980
+ //
18981
+ // @param subject - a term, the subject of the statement(s) being edited.
18982
+ // @param predicate - a term, the predicate of the statement(s) being edited
18983
+ // @param possible - a list of terms, the possible value the object can take
18984
+ // @param options.multiSelect - Boolean - Whether more than one at a time is allowed
18985
+ // @param options.uiMultipleInUse - signals that the ui:choise is used with a ui:multiple
18986
+ // @param options.mint - User may create thing if this sent to the prompt string eg "New foo"
18987
+ // @param options.subForm - If mint, then the form to be used for minting the new thing
18988
+ // @param dataDoc - The web document being edited
18989
+ // @param callbackFunction - takes (boolean ok, string errorBody)
18990
+ */
18991
+
18992
+
18993
+ function makeSelectForChoice(dom, container, kb, subject, predicate, possible, uiFrom, options, dataDoc, callbackFunction) {
18994
+ var n = 0;
18995
+ var uris = {}; // Count them
18996
+
18997
+ var editable = kb.updater.editable(dataDoc.uri);
18998
+
18999
+ for (var i = 0; i < possible.length; i++) {
19000
+ var sub = possible[i]; // @@ Maybe; make this so it works with blank nodes too
19001
+
19002
+ if (!sub.uri) debug.warn("makeSelectForOptions: option does not have an uri: ".concat(sub, ", with predicate: ").concat(predicate));
19003
+ if (!sub.uri || sub.uri in uris) continue;
19004
+ uris[sub.uri] = true;
19005
+ n++;
19006
+ } // uris is now the set of possible options
19007
+
19008
+
19009
+ if (n === 0 && !options.mint) {
19010
+ return (0, _error.errorMessageBlock)(dom, "Can't do selector with no options, subject= " + subject + ' property = ' + predicate + '.');
19011
+ }
19012
+
19013
+ log.debug('makeSelectForOptions: dataDoc=' + dataDoc);
19014
+
19015
+ function determinFirstSelectOption() {
19016
+ var firstSelectOptionText = '--- classify ---';
19017
+ var option = dom.createElement('option');
19018
+
19019
+ if (predicate && !(predicate.termType === 'BlankNode')) {
19020
+ firstSelectOptionText = '* Select for property: ' + utils.label(predicate) + ' *';
19021
+ }
19022
+
19023
+ if (subject && !(subject.termType === 'BlankNode')) {
19024
+ firstSelectOptionText = '* Select for ' + utils.label(subject, true) + ' *';
19025
+ }
19026
+
19027
+ option.appendChild(dom.createTextNode(firstSelectOptionText));
19028
+ option.disabled = true;
19029
+ option.value = true;
19030
+ option.hidden = true;
19031
+ option.selected = true;
19032
+ return option;
19033
+ }
19034
+
19035
+ var onChange = function onChange(_e) {
19036
+ select.refresh();
19037
+ };
19038
+
19039
+ var select = dom.createElement('select');
19040
+ select.setAttribute('style', style.formSelectSTyle);
19041
+ if (options.multiSelect) select.setAttribute('multiSelect', 'true');
19042
+ select.currentURI = null;
19043
+ var object = kb.any(subject, predicate);
19044
+ if (object) select.currentURI = object;
19045
+
19046
+ for (var uri in uris) {
19047
+ select.appendChild(createOption(uri));
19048
+ }
19049
+
19050
+ if (editable && options.mint) {
19051
+ var mint = dom.createElement('option');
19052
+ mint.appendChild(dom.createTextNode(options.mint));
19053
+ mint.AJAR_mint = true; // Flag it
19054
+
19055
+ select.insertBefore(mint, select.firstChild);
19056
+ }
19057
+
19058
+ if (select.children.length === 0) select.insertBefore(determinFirstSelectOption(), select.firstChild);
19059
+
19060
+ select.refresh = function () {
19061
+ select.disabled = true; // unlocked any conflict we had got into
19062
+
19063
+ var ds = [];
19064
+ var is = [];
19065
+
19066
+ var removeValue = function removeValue(t) {
19067
+ if (kb.holds(subject, predicate, t, dataDoc)) {
19068
+ ds.push($rdf.st(subject, predicate, t, dataDoc));
19069
+ }
19070
+ };
19071
+
19072
+ var newObject;
19073
+
19074
+ for (var _i3 = 0; _i3 < select.options.length; _i3++) {
19075
+ var opt = select.options[_i3];
19076
+
19077
+ if (opt.selected && opt.AJAR_mint) {
19078
+ // not sure if this 'if' is used because I cannot find mintClass
19079
+ if (options.mintClass) {
19080
+ var thisForm = promptForNew(dom, kb, subject, predicate, options.mintClass, null, dataDoc, function (ok, body) {
19081
+ if (!ok) {
19082
+ callbackFunction(ok, body, {
19083
+ change: 'new'
19084
+ }); // @@ if ok, need some form of refresh of the select for the new thing
19085
+ }
19086
+ });
19087
+ select.parentNode.appendChild(thisForm);
19088
+ newObject = thisForm.AJAR_subject;
19089
+ } else {
19090
+ newObject = newThing(dataDoc);
19091
+ }
19092
+
19093
+ is.push($rdf.st(subject, predicate, kb.sym(newObject), dataDoc));
19094
+ 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
19095
+
19096
+ if (options.mintStatementsFun) {
19097
+ is = is.concat(options.mintStatementsFun(newObject));
19098
+ }
19099
+
19100
+ select.currentURI = newObject;
19101
+ }
19102
+
19103
+ if (!opt.AJAR_uri) continue; // a prompt or mint
19104
+
19105
+ if (opt.selected) select.currentURI = opt.AJAR_uri;
19106
+ }
19107
+
19108
+ var sel = select.subSelect; // All subclasses must also go
19109
+
19110
+ while (sel && sel.currentURI) {
19111
+ removeValue(kb.sym(sel.currentURI));
19112
+ sel = sel.subSelect;
19113
+ }
19114
+
19115
+ sel = select.superSelect; // All superclasses are redundant
19116
+
19117
+ while (sel && sel.currentURI) {
19118
+ removeValue(kb.sym(sel.currentURI));
19119
+ sel = sel.superSelect;
19120
+ }
19121
+
19122
+ log.info('selectForOptions: data doc = ' + dataDoc);
19123
+
19124
+ if (select.currentURI) {
19125
+ removeNextSiblingsAfterElement(select);
19126
+ addSubFormChoice(dom, container, {}, $rdf.sym(select.currentURI), options.subForm, dataDoc, function (ok, body) {
19127
+ if (ok) {
19128
+ kb.updater.update(ds, is, function (uri, success, errorBody) {
19129
+ if (!success) container.appendChild((0, _error.errorMessageBlock)(dom, 'Error updating select: ' + errorBody));
19130
+ });
19131
+ if (callbackFunction) callbackFunction(ok, {
19132
+ widget: 'select',
19133
+ event: 'new'
19134
+ }); // widgets.refreshTree(container)
19135
+ } else {
19136
+ container.appendChild((0, _error.errorMessageBlock)(dom, 'Error updating data in field of select: ' + body));
19137
+ }
19138
+ });
19139
+ }
19140
+
19141
+ select.disabled = false;
19142
+ };
19143
+
19144
+ function createOption(uri) {
19145
+ var option = dom.createElement('option');
19146
+ var c = kb.sym(uri);
19147
+
19148
+ if (options.disambiguate) {
19149
+ option.appendChild(dom.createTextNode(utils.labelWithOntology(c, true))); // Init. cap
19150
+ } else {
19151
+ option.appendChild(dom.createTextNode(utils.label(c, true))); // Init.
19152
+ }
19153
+
19154
+ var backgroundColor = kb.any(c, kb.sym('http://www.w3.org/ns/ui#backgroundColor'));
19155
+
19156
+ if (backgroundColor) {
19157
+ option.setAttribute('style', 'background-color: ' + backgroundColor.value + '; ');
19158
+ }
19159
+
19160
+ option.AJAR_uri = uri;
19161
+ if (c.toString() === '' + select.currentURI) option.selected = true;
19162
+ return option;
19163
+ }
19164
+
19165
+ if (editable) {
19166
+ select.addEventListener('change', onChange, false);
19167
+ }
19168
+
19169
+ select.refresh();
19170
+ return select;
19171
+ } // makeSelectForChoice
19042
19172
  //# sourceMappingURL=forms.js.map
19043
19173
 
19044
19174
  /***/ }),