contacts-pane 2.4.8 → 2.4.12-beta4
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/.eslintrc +3 -1
- package/.github/workflows/ci.yml +74 -0
- package/.nvmrc +1 -1
- package/LICENSE.md +0 -0
- package/Makefile +0 -0
- package/README.md +0 -0
- package/__tests__/unit/data-reformat-test.js +166 -0
- package/__tests__/unit/data-reformat-test.ts +185 -0
- package/__tests__/unit/setup.js +74 -0
- package/__tests__/unit/setup.ts +77 -0
- package/babel.config.js +13 -0
- package/card.ai +0 -0
- package/card.png +0 -0
- package/contactLogic.js +84 -7
- package/contactsPane.js +64 -20
- package/diff.txt +0 -0
- package/exampleOfOpenData/mit-wikidata-details.ttl +0 -0
- package/exampleOfOpenData/mit-wikidata-query.sparql +0 -0
- package/exampleOfOpenData/wikidata-get.json +0 -0
- package/groupMembershipControl.js +56 -13
- package/individual.js +3 -2
- package/individualForm.js +0 -0
- package/jest.config.js +11 -0
- package/jest.setup.ts +10 -0
- package/lib/autocompleteBar.js +99 -0
- package/lib/autocompleteBar.js.map +1 -0
- package/lib/autocompleteField.js +157 -0
- package/lib/autocompleteField.js.map +1 -0
- package/lib/autocompletePicker.js +240 -0
- package/lib/autocompletePicker.js.map +1 -0
- package/lib/forms.js +315 -0
- package/lib/instituteDetailsQuery.js +38 -0
- package/lib/publicData.js +387 -0
- package/lib/publicData.js.map +1 -0
- package/lib/vcard.js +916 -0
- package/mintNewAddressBook.js +5 -4
- package/mugshotGallery.js +16 -4
- package/organizationForm.js +0 -0
- package/organizationForm.ttl +0 -0
- package/package.json +26 -13
- package/shapes/contacts-shapes.ttl +0 -0
- package/src/autocompleteBar.ts +92 -0
- package/src/autocompleteField.ts +180 -0
- package/src/autocompletePicker.ts +253 -0
- package/src/forms.ttl +1 -1
- package/src/instituteDetailsQuery.sparql +0 -0
- package/src/publicData.ts +385 -0
- package/src/vcard.ttl +0 -0
- package/toolsPane.js +70 -19
- package/tsconfig.json +16 -0
- package/webidControl.js +49 -4
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.autocompleteField = void 0;
|
|
13
|
+
/* Form field for doing autocompleete
|
|
14
|
+
*/
|
|
15
|
+
const rdflib_1 = require("rdflib");
|
|
16
|
+
const solid_logic_1 = require("solid-logic");
|
|
17
|
+
const solid_ui_1 = require("solid-ui");
|
|
18
|
+
const autocompletePicker_1 = require("./autocompletePicker"); // dbpediaParameters
|
|
19
|
+
const AUTOCOMPLETE_THRESHOLD = 4; // don't check until this many characters typed
|
|
20
|
+
const AUTOCOMPLETE_ROWS = 12; // 20?
|
|
21
|
+
/**
|
|
22
|
+
* Render a autocomplete form field
|
|
23
|
+
*
|
|
24
|
+
* The same function is used for many similar one-value fields, with different
|
|
25
|
+
* regexps used to validate.
|
|
26
|
+
*
|
|
27
|
+
* @param dom The HTML Document object aka Document Object Model
|
|
28
|
+
* @param container If present, the created widget will be appended to this
|
|
29
|
+
* @param already A hash table of (form, subject) kept to prevent recursive forms looping
|
|
30
|
+
* @param subject The thing about which the form displays/edits data
|
|
31
|
+
* @param form The form or field to be rendered
|
|
32
|
+
* @param doc The web document in which the data is
|
|
33
|
+
* @param callbackFunction Called when data is changed?
|
|
34
|
+
*
|
|
35
|
+
* @returns The HTML widget created
|
|
36
|
+
*/
|
|
37
|
+
// eslint-disable-next-line complexity
|
|
38
|
+
function autocompleteField(// @@ are they allowed too be async??
|
|
39
|
+
dom, container, already, subject, form, doc, callbackFunction) {
|
|
40
|
+
function addOneIdAndRefresh(result, _name) {
|
|
41
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
42
|
+
const ds = kb.statementsMatching(subject, property); // remove any multiple values
|
|
43
|
+
let is = ds.map(statement => (0, rdflib_1.st)(statement.subject, statement.predicate, result, statement.why)); // can include >1 doc
|
|
44
|
+
if (is.length === 0) {
|
|
45
|
+
// or none
|
|
46
|
+
is = [(0, rdflib_1.st)(subject, property, result, doc)];
|
|
47
|
+
}
|
|
48
|
+
try {
|
|
49
|
+
yield kb.updater.updateMany(ds, is);
|
|
50
|
+
}
|
|
51
|
+
catch (err) {
|
|
52
|
+
callbackFunction(false, err);
|
|
53
|
+
box.appendChild(solid_ui_1.widgets.errorMessageBlock(dom, 'Autocomplete form data write error:' + err));
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
callbackFunction(true, '');
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
const kb = solid_logic_1.store;
|
|
60
|
+
const formDoc = form.doc ? form.doc() : null; // @@ if blank no way to know
|
|
61
|
+
const box = dom.createElement('tr');
|
|
62
|
+
if (container)
|
|
63
|
+
container.appendChild(box);
|
|
64
|
+
const lhs = dom.createElement('td');
|
|
65
|
+
lhs.setAttribute('class', 'formFieldName');
|
|
66
|
+
lhs.setAttribute('style', ' vertical-align: middle;');
|
|
67
|
+
box.appendChild(lhs);
|
|
68
|
+
const rhs = dom.createElement('td');
|
|
69
|
+
rhs.setAttribute('class', 'formFieldValue');
|
|
70
|
+
box.appendChild(rhs);
|
|
71
|
+
const property = kb.any(form, solid_ui_1.ns.ui('property'));
|
|
72
|
+
if (!property) {
|
|
73
|
+
box.appendChild(dom.createTextNode('Error: No property given for autocomplete field: ' + form));
|
|
74
|
+
return box;
|
|
75
|
+
}
|
|
76
|
+
const searchClass = kb.any(form, solid_ui_1.ns.ui('searchClass'));
|
|
77
|
+
if (!searchClass) {
|
|
78
|
+
box.appendChild(dom.createTextNode('Error: No searchClass given for autocomplete field: ' + form));
|
|
79
|
+
return box;
|
|
80
|
+
}
|
|
81
|
+
const endPoint = kb.any(form, solid_ui_1.ns.ui('endPoint'));
|
|
82
|
+
if (!endPoint) {
|
|
83
|
+
box.appendChild(dom.createTextNode('Error: No SPARQL endPoint given for autocomplete field: ' + form));
|
|
84
|
+
return box;
|
|
85
|
+
}
|
|
86
|
+
const queryTemplate = kb.any(form, solid_ui_1.ns.ui('queryTemplate'));
|
|
87
|
+
if (!queryTemplate) {
|
|
88
|
+
box.appendChild(dom.createTextNode('Error: No queryTemplate given for autocomplete field: ' + form));
|
|
89
|
+
return box;
|
|
90
|
+
}
|
|
91
|
+
// It can be cleaner to just remove empty fields if you can't edit them anyway
|
|
92
|
+
const suppressEmptyUneditable = kb.anyJS(form, solid_ui_1.ns.ui('suppressEmptyUneditable'), null, formDoc);
|
|
93
|
+
lhs.appendChild(solid_ui_1.widgets.fieldLabel(dom, property, form));
|
|
94
|
+
const uri = solid_ui_1.widgets.mostSpecificClassURI(form);
|
|
95
|
+
let params = solid_ui_1.widgets.fieldParams[uri];
|
|
96
|
+
if (params === undefined)
|
|
97
|
+
params = {}; // non-bottom field types can do this
|
|
98
|
+
const theStyle = params.style || solid_ui_1.style.textInputStyle;
|
|
99
|
+
const klass = kb.the(form, solid_ui_1.ns.ui('category'), null, formDoc);
|
|
100
|
+
/*
|
|
101
|
+
{ label: string;
|
|
102
|
+
logo: string;
|
|
103
|
+
searchByNameQuery?: string;
|
|
104
|
+
searchByNameURI?: string;
|
|
105
|
+
insitituteDetailsQuery?: string;
|
|
106
|
+
endPoint?: string;
|
|
107
|
+
class: object
|
|
108
|
+
}
|
|
109
|
+
*/
|
|
110
|
+
queryParams.endPoint = endPoint.uri;
|
|
111
|
+
const searchByNameQuery = kb.the(form, solid_ui_1.ns.ui('searchByNameQuery'), null, formDoc);
|
|
112
|
+
queryParams.searchByNameQuery = searchByNameQuery;
|
|
113
|
+
var queryParams = { label: 'from form', logo: '', class: klass, endPoint, searchByNameQuery };
|
|
114
|
+
const options = {
|
|
115
|
+
// acceptButton?: HTMLElement,
|
|
116
|
+
class: klass,
|
|
117
|
+
queryParams
|
|
118
|
+
};
|
|
119
|
+
// const acWiget = rhs.appendChild(await renderAutoComplete(dom, options, addOneIdAndRefresh))
|
|
120
|
+
// @@ set existing value is any
|
|
121
|
+
(0, autocompletePicker_1.renderAutoComplete)(dom, options, addOneIdAndRefresh).then(acWiget => rhs.appendChild(acWiget));
|
|
122
|
+
const field = dom.createElement('input');
|
|
123
|
+
field.style = solid_ui_1.style.textInputStyle; // Do we have to override length etc?
|
|
124
|
+
rhs.appendChild(field);
|
|
125
|
+
field.setAttribute('type', params.type ? params.type : 'text');
|
|
126
|
+
const size = kb.any(form, solid_ui_1.ns.ui('size')); // Form has precedence
|
|
127
|
+
field.setAttribute('size', size ? '' + size : params.size ? '' + params.size : '20');
|
|
128
|
+
const maxLength = kb.any(form, solid_ui_1.ns.ui('maxLength'));
|
|
129
|
+
field.setAttribute('maxLength', maxLength ? '' + maxLength : '4096');
|
|
130
|
+
doc = doc || solid_ui_1.widgets.fieldStore(subject, property, doc);
|
|
131
|
+
let obj = kb.any(subject, property, undefined, doc);
|
|
132
|
+
if (!obj) {
|
|
133
|
+
obj = kb.any(form, solid_ui_1.ns.ui('default'));
|
|
134
|
+
}
|
|
135
|
+
if (obj) {
|
|
136
|
+
/* istanbul ignore next */
|
|
137
|
+
field.value = obj.value || obj.value || '';
|
|
138
|
+
}
|
|
139
|
+
field.setAttribute('style', solid_ui_1.style);
|
|
140
|
+
if (!kb.updater) {
|
|
141
|
+
throw new Error('kb has no updater');
|
|
142
|
+
}
|
|
143
|
+
if (!kb.updater.editable(doc.uri)) {
|
|
144
|
+
field.readOnly = true // was: disabled. readOnly is better
|
|
145
|
+
;
|
|
146
|
+
field.style = solid_ui_1.style.textInputStyleUneditable;
|
|
147
|
+
// backgroundColor = textInputBackgroundColorUneditable
|
|
148
|
+
if (suppressEmptyUneditable && field.value === '') {
|
|
149
|
+
box.style.display = 'none'; // clutter
|
|
150
|
+
}
|
|
151
|
+
return box;
|
|
152
|
+
}
|
|
153
|
+
return box;
|
|
154
|
+
}
|
|
155
|
+
exports.autocompleteField = autocompleteField;
|
|
156
|
+
// ends
|
|
157
|
+
//# sourceMappingURL=autocompleteField.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"autocompleteField.js","sourceRoot":"","sources":["../src/autocompleteField.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.renderAutoComplete = void 0;
|
|
13
|
+
const solid_logic_1 = require("solid-logic");
|
|
14
|
+
const solid_ui_1 = require("solid-ui");
|
|
15
|
+
const publicData_1 = require("./publicData");
|
|
16
|
+
const AUTOCOMPLETE_THRESHOLD = 4; // don't check until this many characters typed
|
|
17
|
+
const AUTOCOMPLETE_ROWS = 20; // 20?
|
|
18
|
+
const AUTOCOMPLETE_ROWS_STRETCH = 40;
|
|
19
|
+
const AUTOCOMPLETE_DEBOUNCE_MS = 300;
|
|
20
|
+
const autocompleteRowStyle = 'border: 0.2em solid straw;'; // @@ white
|
|
21
|
+
// The core of the autocomplete UI
|
|
22
|
+
function renderAutoComplete(dom, options, // subject:NamedNode, predicate:NamedNode,
|
|
23
|
+
callback) {
|
|
24
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
25
|
+
function complain(message) {
|
|
26
|
+
const errorRow = table.appendChild(dom.createElement('tr'));
|
|
27
|
+
console.log(message);
|
|
28
|
+
errorRow.appendChild(solid_ui_1.widgets.errorMessageBlock(dom, message, 'pink'));
|
|
29
|
+
solid_ui_1.style.setStyle(errorRow, 'autocompleteRowStyle');
|
|
30
|
+
errorRow.style.padding = '1em';
|
|
31
|
+
}
|
|
32
|
+
function remove(ele) {
|
|
33
|
+
if (ele) {
|
|
34
|
+
ele.parentNode.removeChild(ele);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
function finish(object, name) {
|
|
38
|
+
console.log('Auto complete: finish! ' + object);
|
|
39
|
+
// remove(options.cancelButton)
|
|
40
|
+
// remove(options.acceptButton)
|
|
41
|
+
// remove(div)
|
|
42
|
+
callback(object, name);
|
|
43
|
+
}
|
|
44
|
+
function gotIt(object, name) {
|
|
45
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
46
|
+
if (options.acceptButton) {
|
|
47
|
+
options.acceptButton.disabled = false;
|
|
48
|
+
searchInput.value = name; // complete it
|
|
49
|
+
foundName = name;
|
|
50
|
+
foundObject = object;
|
|
51
|
+
console.log('Auto complete: name: ' + name);
|
|
52
|
+
console.log('Auto complete: waiting for accept ' + object);
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
finish(object, name);
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
function acceptButtonHandler(_event) {
|
|
59
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
60
|
+
if (searchInput.value === foundName) { // still
|
|
61
|
+
finish(foundObject, foundName);
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
options.acceptButton.disabled = true;
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
function cancelButtonHandler(_event) {
|
|
69
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
70
|
+
console.log('Auto complete: Canceled by user! ');
|
|
71
|
+
div.innerHTML = ''; // Clear out the table
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
function nameMatch(filter, candidate) {
|
|
75
|
+
const parts = filter.split(' '); // Each name part must be somewhere
|
|
76
|
+
for (let j = 0; j < parts.length; j++) {
|
|
77
|
+
const word = parts[j];
|
|
78
|
+
if (candidate.toLowerCase().indexOf(word) < 0)
|
|
79
|
+
return false;
|
|
80
|
+
}
|
|
81
|
+
return true;
|
|
82
|
+
}
|
|
83
|
+
function cancelText(_event) {
|
|
84
|
+
searchInput.value = '';
|
|
85
|
+
if (options.acceptButton) {
|
|
86
|
+
options.acceptButton.disabled == true; // start again
|
|
87
|
+
}
|
|
88
|
+
candidatesLoaded = false;
|
|
89
|
+
}
|
|
90
|
+
function thinOut(filter) {
|
|
91
|
+
var hits = 0;
|
|
92
|
+
var pick = null, pickedName = '';
|
|
93
|
+
for (let j = table.children.length - 1; j > 0; j--) { // backwards as we are removing rows
|
|
94
|
+
let row = table.children[j];
|
|
95
|
+
if (nameMatch(filter, row.textContent)) {
|
|
96
|
+
hits += 1;
|
|
97
|
+
pick = row.getAttribute('subject');
|
|
98
|
+
pickedName = row.textContent;
|
|
99
|
+
row.style.display = '';
|
|
100
|
+
row.style.color = 'blue'; // @@ chose color
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
;
|
|
104
|
+
row.style.display = 'none';
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
if (hits == 1) { // Maybe require green confirmation button be clicked?
|
|
108
|
+
console.log(` auto complete elimination: "${filter}" -> "${pickedName}"`);
|
|
109
|
+
gotIt(solid_logic_1.store.sym(pick), pickedName); // uri, name
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
function clearList() {
|
|
113
|
+
while (table.children.length > 1) {
|
|
114
|
+
table.removeChild(table.lastChild);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
function inputEventHHandler(_event) {
|
|
118
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
119
|
+
if (runningTimeout) {
|
|
120
|
+
clearTimeout(runningTimeout);
|
|
121
|
+
}
|
|
122
|
+
setTimeout(refreshList, AUTOCOMPLETE_DEBOUNCE_MS);
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
function refreshList() {
|
|
126
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
127
|
+
if (inputEventHandlerLock) {
|
|
128
|
+
console.log(`Ignoring "${searchInput.value}" because of lock `);
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
inputEventHandlerLock = true;
|
|
132
|
+
var languagePrefs = yield (0, publicData_1.getPreferredLanguages)();
|
|
133
|
+
const filter = searchInput.value.trim().toLowerCase();
|
|
134
|
+
if (filter.length < AUTOCOMPLETE_THRESHOLD) { // too small
|
|
135
|
+
clearList();
|
|
136
|
+
candidatesLoaded = false;
|
|
137
|
+
numberOfRows = AUTOCOMPLETE_ROWS;
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
if (allDisplayed && lastFilter && filter.startsWith(lastFilter)) {
|
|
141
|
+
thinOut(filter); // reversible?
|
|
142
|
+
inputEventHandlerLock = false;
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
var bindings;
|
|
146
|
+
try {
|
|
147
|
+
bindings = yield (0, publicData_1.queryPublicDataByName)(filter, OrgClass, options.queryParams);
|
|
148
|
+
// bindings = await queryDbpedia(sparql)
|
|
149
|
+
}
|
|
150
|
+
catch (err) {
|
|
151
|
+
complain('Error querying db of organizations: ' + err);
|
|
152
|
+
inputEventHandlerLock = false;
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
candidatesLoaded = true;
|
|
156
|
+
const loadedEnough = bindings.length < publicData_1.AUTOCOMPLETE_LIMIT;
|
|
157
|
+
if (loadedEnough) {
|
|
158
|
+
lastFilter = filter;
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
lastFilter = null;
|
|
162
|
+
}
|
|
163
|
+
clearList();
|
|
164
|
+
const slimmed = (0, publicData_1.filterByLanguage)(bindings, languagePrefs);
|
|
165
|
+
if (loadedEnough && slimmed.length <= AUTOCOMPLETE_ROWS_STRETCH) {
|
|
166
|
+
numberOfRows = slimmed.length; // stretch if it means we get all items
|
|
167
|
+
}
|
|
168
|
+
allDisplayed = loadedEnough && slimmed.length <= numberOfRows;
|
|
169
|
+
console.log(` Filter:"${filter}" bindings: ${bindings.length}, slimmed to ${slimmed.length}; rows: ${numberOfRows}, Enough? ${loadedEnough}, All displayed? ${allDisplayed}`);
|
|
170
|
+
slimmed.slice(0, numberOfRows).forEach(binding => {
|
|
171
|
+
const row = table.appendChild(dom.createElement('tr'));
|
|
172
|
+
solid_ui_1.style.setStyle(row, 'autocompleteRowStyle');
|
|
173
|
+
var uri = binding.subject.value;
|
|
174
|
+
var name = binding.name.value;
|
|
175
|
+
row.setAttribute('style', 'padding: 0.3em;');
|
|
176
|
+
row.setAttribute('subject', uri);
|
|
177
|
+
row.style.color = allDisplayed ? '#080' : '#000'; // green means 'you should find it here'
|
|
178
|
+
row.textContent = name;
|
|
179
|
+
row.addEventListener('click', (_event) => __awaiter(this, void 0, void 0, function* () {
|
|
180
|
+
console.log(' click row textContent: ' + row.textContent);
|
|
181
|
+
console.log(' click name: ' + name);
|
|
182
|
+
gotIt(solid_logic_1.store.sym(uri), name);
|
|
183
|
+
}));
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
inputEventHandlerLock = false;
|
|
187
|
+
});
|
|
188
|
+
} // refreshList
|
|
189
|
+
/* sparqlForSearch
|
|
190
|
+
*
|
|
191
|
+
* name -- e.g., "mass"
|
|
192
|
+
* theType -- e.g., <http://umbel.org/umbel/rc/EducationalOrganization>
|
|
193
|
+
*/
|
|
194
|
+
function sparqlForSearch(name, theType) {
|
|
195
|
+
let clean = name.replace(/\W/g, ''); // Remove non alphanum so as to protect regexp
|
|
196
|
+
const sparql = `select distinct ?subject, ?name where {
|
|
197
|
+
?subject a <${theType.uri}>; rdfs:label ?name
|
|
198
|
+
FILTER regex(?name, "${clean}", "i")
|
|
199
|
+
} LIMIT ${publicData_1.AUTOCOMPLETE_LIMIT}`;
|
|
200
|
+
return sparql;
|
|
201
|
+
}
|
|
202
|
+
const queryParams = options.queryParams;
|
|
203
|
+
const OrgClass = options.class; // kb.sym('http://umbel.org/umbel/rc/EducationalOrganization') // @@@ other
|
|
204
|
+
if (options.acceptButton) {
|
|
205
|
+
options.acceptButton.addEventListener('click', acceptButtonHandler, false);
|
|
206
|
+
}
|
|
207
|
+
if (options.cancelButton) {
|
|
208
|
+
// options.cancelButton.addEventListener('click', cancelButtonHandler, false)
|
|
209
|
+
}
|
|
210
|
+
let candidatesLoaded = false;
|
|
211
|
+
let runningTimeout = null;
|
|
212
|
+
let inputEventHandlerLock = false;
|
|
213
|
+
let allDisplayed = false;
|
|
214
|
+
var lastFilter = null;
|
|
215
|
+
var numberOfRows = AUTOCOMPLETE_ROWS;
|
|
216
|
+
var div = dom.createElement('div');
|
|
217
|
+
var foundName = null; // once found accepted string must match this
|
|
218
|
+
var foundObject = null;
|
|
219
|
+
var table = div.appendChild(dom.createElement('table'));
|
|
220
|
+
table.setAttribute('style', 'max-width: 30em; margin: 0.5em;');
|
|
221
|
+
const head = table.appendChild(dom.createElement('tr'));
|
|
222
|
+
solid_ui_1.style.setStyle(head, 'autocompleteRowStyle');
|
|
223
|
+
const cell = head.appendChild(dom.createElement('td'));
|
|
224
|
+
const searchInput = cell.appendChild(dom.createElement('input'));
|
|
225
|
+
searchInput.setAttribute('type', 'text');
|
|
226
|
+
const searchInputStyle = solid_ui_1.style.searchInputStyle ||
|
|
227
|
+
'border: 0.1em solid #444; border-radius: 0.5em; width: 100%; font-size: 100%; padding: 0.1em 0.6em'; // @
|
|
228
|
+
searchInput.setAttribute('style', searchInputStyle);
|
|
229
|
+
searchInput.addEventListener('keyup', function (event) {
|
|
230
|
+
if (event.keyCode === 13) {
|
|
231
|
+
acceptButtonHandler(event);
|
|
232
|
+
}
|
|
233
|
+
}, false);
|
|
234
|
+
searchInput.addEventListener('input', inputEventHHandler);
|
|
235
|
+
return div;
|
|
236
|
+
});
|
|
237
|
+
} // renderAutoComplete
|
|
238
|
+
exports.renderAutoComplete = renderAutoComplete;
|
|
239
|
+
const ends = 'ENDS';
|
|
240
|
+
//# sourceMappingURL=autocompletePicker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"autocompletePicker.js","sourceRoot":"","sources":["../src/autocompletePicker.ts"],"names":[],"mappings":"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"}
|