solid-ui 2.4.23 → 2.4.24
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 +2159 -5039
- package/dist/main.js.map +1 -1
- package/lib/acl/access-controller.js +4 -67
- package/lib/acl/access-controller.js.map +1 -1
- package/lib/acl/access-groups.js +59 -137
- package/lib/acl/access-groups.js.map +1 -1
- package/lib/acl/acl-control.js +14 -54
- package/lib/acl/acl-control.js.map +1 -1
- package/lib/acl/acl.js +32 -107
- package/lib/acl/acl.js.map +1 -1
- package/lib/acl/add-agent-buttons.js +0 -92
- package/lib/acl/add-agent-buttons.js.map +1 -1
- package/lib/acl/index.js +1 -3
- package/lib/acl/index.js.map +1 -1
- package/lib/acl/styles.js +1 -2
- package/lib/acl/styles.js.map +1 -1
- package/lib/chat/bookmarks.js +8 -80
- package/lib/chat/bookmarks.js.map +1 -1
- package/lib/chat/chatLogic.js +109 -180
- package/lib/chat/chatLogic.js.map +1 -1
- package/lib/chat/dateFolder.js +6 -91
- package/lib/chat/dateFolder.js.map +1 -1
- package/lib/chat/infinite.js +33 -185
- package/lib/chat/infinite.js.map +1 -1
- package/lib/chat/message.js +37 -150
- package/lib/chat/message.js.map +1 -1
- package/lib/chat/messageTools.js +23 -96
- package/lib/chat/messageTools.js.map +1 -1
- package/lib/chat/thread.js +33 -91
- package/lib/chat/thread.js.map +1 -1
- package/lib/create/create.js +19 -51
- package/lib/create/create.js.map +1 -1
- package/lib/create/index.js +0 -2
- package/lib/create/index.js.map +1 -1
- package/lib/debug.js +0 -8
- package/lib/debug.js.map +1 -1
- package/lib/folders.js +4 -27
- package/lib/folders.js.map +1 -1
- package/lib/footer/index.js +2 -24
- package/lib/footer/index.js.map +1 -1
- package/lib/footer/styleMap.js.map +1 -1
- package/lib/header/empty-profile.js.map +1 -1
- package/lib/header/index.js +3 -72
- package/lib/header/index.js.map +1 -1
- package/lib/header/styleMap.js +4 -3
- package/lib/header/styleMap.js.map +1 -1
- package/lib/iconBase.js +3 -4
- package/lib/iconBase.js.map +1 -1
- package/lib/index.js +5 -46
- package/lib/index.js.map +1 -1
- package/lib/jss/index.js +3 -9
- package/lib/jss/index.js.map +1 -1
- package/lib/log.js +15 -51
- package/lib/log.js.map +1 -1
- package/lib/login/login.js +74 -303
- package/lib/login/login.js.map +1 -1
- package/lib/matrix/index.js +0 -2
- package/lib/matrix/index.js.map +1 -1
- package/lib/matrix/matrix.js +7 -55
- package/lib/matrix/matrix.js.map +1 -1
- package/lib/media/index.js +0 -2
- package/lib/media/index.js.map +1 -1
- package/lib/media/media-capture.js +13 -33
- package/lib/media/media-capture.js.map +1 -1
- package/lib/messageArea.js +23 -64
- package/lib/messageArea.js.map +1 -1
- package/lib/noun_Camera_1618446_000000.js.map +1 -1
- package/lib/ns.js +5 -7
- package/lib/ns.js.map +1 -1
- package/lib/pad.js +48 -234
- package/lib/pad.js.map +1 -1
- package/lib/participation.js +10 -65
- package/lib/participation.js.map +1 -1
- package/lib/preferences.js +21 -42
- package/lib/preferences.js.map +1 -1
- package/lib/signup/config-default.js +1 -8
- package/lib/signup/config-default.js.map +1 -1
- package/lib/signup/signup.js +6 -13
- package/lib/signup/signup.js.map +1 -1
- package/lib/stories/decorators.js +0 -2
- package/lib/stories/decorators.js.map +1 -1
- package/lib/style.js +8 -5
- package/lib/style.js.map +1 -1
- package/lib/style_multiSelect.js +1 -5
- package/lib/style_multiSelect.js.map +1 -1
- package/lib/table.js +309 -322
- package/lib/table.js.map +1 -1
- package/lib/tabs.js +20 -100
- package/lib/tabs.js.map +1 -1
- package/lib/utils/headerFooterHelpers.js +4 -52
- package/lib/utils/headerFooterHelpers.js.map +1 -1
- package/lib/utils/index.js +41 -135
- package/lib/utils/index.js.map +1 -1
- package/lib/utils/label.js +13 -34
- package/lib/utils/label.js.map +1 -1
- package/lib/versionInfo.js +4 -4
- package/lib/versionInfo.js.map +1 -1
- package/lib/widgets/buttons/iconLinks.js +0 -8
- package/lib/widgets/buttons/iconLinks.js.map +1 -1
- package/lib/widgets/buttons.js +115 -291
- package/lib/widgets/buttons.js.map +1 -1
- package/lib/widgets/dragAndDrop.js +12 -41
- package/lib/widgets/dragAndDrop.js.map +1 -1
- package/lib/widgets/error.js +3 -9
- package/lib/widgets/error.js.map +1 -1
- package/lib/widgets/forms/autocomplete/autocompleteBar.js +8 -71
- package/lib/widgets/forms/autocomplete/autocompleteBar.js.map +1 -1
- package/lib/widgets/forms/autocomplete/autocompleteField.js +13 -65
- package/lib/widgets/forms/autocomplete/autocompleteField.js.map +1 -1
- package/lib/widgets/forms/autocomplete/autocompletePicker.js +15 -107
- package/lib/widgets/forms/autocomplete/autocompletePicker.js.map +1 -1
- package/lib/widgets/forms/autocomplete/language.js +6 -55
- package/lib/widgets/forms/autocomplete/language.js.map +1 -1
- package/lib/widgets/forms/autocomplete/publicData.js +12 -131
- package/lib/widgets/forms/autocomplete/publicData.js.map +1 -1
- package/lib/widgets/forms/basic.js +12 -55
- package/lib/widgets/forms/basic.js.map +1 -1
- package/lib/widgets/forms/comment.js +1 -15
- package/lib/widgets/forms/comment.js.map +1 -1
- package/lib/widgets/forms/fieldFunction.js +3 -16
- package/lib/widgets/forms/fieldFunction.js.map +1 -1
- package/lib/widgets/forms/fieldParams.js +0 -12
- package/lib/widgets/forms/fieldParams.js.map +1 -1
- package/lib/widgets/forms/formStyle.js +1 -14
- package/lib/widgets/forms/formStyle.js.map +1 -1
- package/lib/widgets/forms.js +70 -474
- package/lib/widgets/forms.js.map +1 -1
- package/lib/widgets/index.js +0 -21
- package/lib/widgets/index.js.map +1 -1
- package/lib/widgets/multiSelect.js +48 -171
- package/lib/widgets/multiSelect.js.map +1 -1
- package/lib/widgets/peoplePicker.js +20 -90
- package/lib/widgets/peoplePicker.js.map +1 -1
- package/lib/widgets/widgetHelpers.js +2 -9
- package/lib/widgets/widgetHelpers.js.map +1 -1
- package/package.json +28 -28
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"autocompleteField.js","names":["autocompleteField","dom","container","already","subject","form","doc","callbackFunction","addOneIdAndRefresh","result","name","Error","oldValue","kb","the","property","oldName","any","labelProperty","equals","sameTerm","deletables","statementsMatching","concat","insertables","st","updater","updateMany","box","appendChild","widgets","errorMessageBlock","deleteOne","_result","_name","e2","termType","store","formDoc","createElement","lhs","setAttribute","style","formFieldNameBoxStyle","rhs","ns","ui","schema","dataSource","queryParams","label","anyJS","logo","targetClass","objectURIBase","undefined","endpoint","searchByNameQuery","insitituteDetailsQuery","searchByNameURI","suppressEmptyUneditable","editable","uri","autocompleteOptions","permanent","size","obj","currentObject","currentName","display","fieldLabel","barOptions","dbLookup","renderAutocompleteControl","then","control","err"],"sources":["../../../../src/widgets/forms/autocomplete/autocompleteField.ts"],"sourcesContent":["/* Form field for doing autocompleete\n */\nimport * as ns from '../../../ns'\nimport { store } from 'solid-logic'\nimport * as widgets from '../../../widgets'\nimport * as style from '../../../style'\nimport { renderAutocompleteControl } from './autocompleteBar'\nimport { QueryParameters } from './publicData'\nimport { NamedNode, BlankNode, Literal, Variable, st } from 'rdflib'\nimport { AutocompleteOptions } from './autocompletePicker'\n/**\n * Render a autocomplete form field\n *\n * The autocomplete form searches for an object in a definitive public database,\n * and allows the user to search for it by name, displaying a list of objects whose names match\n * the input to date, and letting the user either click on one of the list,\n * or just go on untill there is only one. The process then returns two values,\n * the URiI of the object and its name.\n *\n * @param dom The HTML Document object aka Document Object Model\n * @param container If present, the created widget will be appended to this\n * @param already A hash table of (form, subject) kept to prevent recursive forms looping\n * @param subject The thing about which the form displays/edits data\n * @param form The form or field to be rendered\n * @param doc The web document in which the data is\n * @param callbackFunction Called when data is changed so other parts can be refreshed.\n *\n * Form properties:\n * @param ui:property The property to store the object itself\n * @param ui:labelProperty The property used to store the name of the object\n * @param ui:category The class of objects to be searched, if fixed (else dep on class of subject)\n *\n * @returns The HTML widget created\n */\n// eslint-disable-next-line complexity\nexport function autocompleteField (\n dom: HTMLDocument,\n container: HTMLElement | undefined,\n already,\n subject: NamedNode | BlankNode | Variable,\n form: NamedNode,\n doc: NamedNode | undefined,\n callbackFunction: (_ok: boolean, _errorMessage: string) => void\n): HTMLElement {\n async function addOneIdAndRefresh (result:NamedNode | Literal, name: Literal) {\n if (!name) {\n throw new Error('autocompleteField: No name set.')\n }\n const oldValue = kb.the(subject, property as any, null, doc)\n if (oldValue) {\n const oldName = kb.any(oldValue as any, labelProperty as any, null, doc)\n if (oldValue.equals(result) && oldName && oldName.sameTerm(name)) {\n // console.log('No change: same values.')\n return\n }\n }\n const deletables = oldValue\n ? kb.statementsMatching(subject, property as any, oldValue, doc)\n .concat(kb.statementsMatching(oldValue as any, labelProperty as any, null, doc))\n : []\n // console.log('autocompleteField Deletables ' + deletables.map(st => st.toNT()))\n const insertables = [st(subject, property as any, result, doc),\n st(result as any, labelProperty as any, name, doc)] // @@ track the language of the name too!\n // console.log(`AC form: ${deletables.length} to delete and ${insertables.length} to insert`)\n try {\n // console.log('@@@ AC updating ', deletables, insertables)\n await kb.updater?.updateMany(deletables, insertables)\n } catch (err) {\n callbackFunction(false, err)\n box.appendChild(widgets.errorMessageBlock(dom, 'Autocomplete form data update error:' + err, null, err))\n return\n }\n callbackFunction(true, '')\n }\n\n async function deleteOne (_result:NamedNode | Literal, _name: Literal) {\n const oldValue = kb.the(subject, property as any, null, doc)\n if (!oldValue) {\n callbackFunction(false, 'NO data to elete')\n box.appendChild(widgets.errorMessageBlock(dom, 'Autocomplete delete: no old data!'))\n return\n }\n // const oldName = kb.any(oldValue as any, labelProperty as any, null, doc)\n const deletables = kb.statementsMatching(subject, property as any, oldValue, doc)\n .concat(kb.statementsMatching(oldValue as any, labelProperty as any, null, doc))\n // console.log('autocompleteField Deletables ' + deletables.map(st => st.toNT()))\n const insertables = []\n // console.log(`AC form delete: ${deletables.length} to delete and ${insertables.length} to insert`)\n try {\n // console.log('@@@ AC updating ', deletables, insertables)\n await kb.updater?.updateMany(deletables, insertables)\n } catch (err) {\n const e2 = new Error('Autocomplete form data delete error:' + err)\n callbackFunction(false, err)\n box.appendChild(widgets.errorMessageBlock(dom, e2, null, err))\n return\n }\n callbackFunction(true, '') // changed\n }\n\n if (subject.termType !== 'NamedNode') {\n throw new Error('Sorry this field only works on NamedNode subjects (for editable)')\n }\n const kb = store\n const formDoc = form.doc ? form.doc() : null // @@ if blank no way to know\n\n const box = dom.createElement('div')\n if (container) container.appendChild(box)\n const lhs = dom.createElement('div')\n lhs.setAttribute('class', 'formFieldName')\n lhs.setAttribute('style', style.formFieldNameBoxStyle)\n box.appendChild(lhs)\n const rhs = dom.createElement('div')\n rhs.setAttribute('class', 'formFieldValue')\n box.appendChild(rhs)\n\n const property = kb.any(form, ns.ui('property'))\n if (!property) {\n return box.appendChild(\n widgets.errorMessageBlock(dom, 'Error: No property given for autocomplete field: ' + form)\n )\n }\n const labelProperty = kb.any(form, ns.ui('labelProperty')) || ns.schema('name')\n\n // Parse the data source into query options\n\n const dataSource = kb.any(form, ns.ui('dataSource')) as NamedNode | undefined\n if (!dataSource) {\n // console.log('@@ connectedStatements ACF ', kb.connectedStatements(form).map(x => x.toNT()).join('\\n'))\n return box.appendChild(\n widgets.errorMessageBlock(dom, 'Error: No data source given for autocomplete field: ' + form)\n )\n }\n const queryParams:QueryParameters = {\n // targetClass: kb.any(dataSource, ns.ui('targetClass'), null, dataSource.doc()) as NamedNode | undefined,\n label: kb.anyJS(dataSource, ns.schema('name'), null, dataSource.doc()),\n logo: (kb.any(dataSource, ns.schema('logo'), null, dataSource.doc())) as NamedNode | undefined\n }\n\n // @@ Should we pass the target class in from the data source definition or use a current type of the subject\n const targetClass = (kb.any(form, ns.ui('targetClass'), null, form.doc()) || // class in form takes pecedence\n kb.any(dataSource, ns.ui('targetClass'), null, dataSource.doc())) as NamedNode | undefined\n if (targetClass) {\n queryParams.targetClass = targetClass\n }\n\n queryParams.objectURIBase = (kb.any(dataSource, ns.ui('objectURIBase'), null, dataSource.doc()) || undefined) as NamedNode | undefined\n\n /*\n if (!queryParams.targetClass) {\n const klass = kb.any(subject, ns.rdf('type')) as NamedNode | undefined\n // @@ be more selective of which class if many\n // @@ todo: Take ALL classes, and compare them with those the data source knows about\n // with translation where necessary. Find most specific of the classes for the search.\n if (!klass) throw new Error('Autocomplete: No class specified or is current type of' + subject)\n queryParams.targetClass = klass\n }\n */\n const endpoint = kb.anyJS(dataSource, ns.ui('endpoint'), null, dataSource.doc()) as string | undefined\n if (endpoint) { // SPARQL\n queryParams.endpoint = endpoint\n\n queryParams.searchByNameQuery = kb.anyJS(dataSource, ns.ui('searchByNameQuery'), null, dataSource.doc())\n if (!queryParams.searchByNameQuery) {\n return box.appendChild(\n widgets.errorMessageBlock(dom, 'Error: No searchByNameQuery given for endpoint data Source: ' + form))\n }\n queryParams.insitituteDetailsQuery = kb.anyJS(dataSource, ns.ui('insitituteDetailsQuery'), null, dataSource.doc())\n } else {\n // return box.appendChild(\n // widgets.errorMessageBlock(dom, 'Error: No SPARQL endpoint given for autocomplete field: ' + form))\n const searchByNameURI = kb.anyJS(dataSource, ns.ui('searchByNameURI'))\n if (!searchByNameURI) {\n return box.appendChild(\n widgets.errorMessageBlock(dom, 'Error: No searchByNameURI OR sparql endpoint given for dataSource: ' + dataSource)\n )\n }\n queryParams.searchByNameURI = searchByNameURI\n }\n // It can be cleaner to just remove empty fields if you can't edit them anyway\n const suppressEmptyUneditable = kb.anyJS(form, ns.ui('suppressEmptyUneditable'), null, formDoc)\n const editable = kb.updater?.editable((doc as NamedNode).uri)\n\n const autocompleteOptions:AutocompleteOptions = { // cancelButton?: HTMLElement,\n permanent: true,\n targetClass: queryParams.targetClass, // @@ simplify?\n queryParams\n }\n\n autocompleteOptions.size = kb.anyJS(form, ns.ui('size'), null, formDoc) || undefined\n\n let obj = kb.any(subject, property as any, undefined, doc)\n if (!obj) {\n obj = kb.any(form, ns.ui('default'))\n if (obj) {\n autocompleteOptions.currentObject = obj as NamedNode\n autocompleteOptions.currentName = kb.any(autocompleteOptions.currentObject, labelProperty, null, doc) as Literal\n } else { // No data or default. Should we suprress the whole field?\n if (suppressEmptyUneditable && !editable) {\n box.style.display = 'none' // clutter removal\n return box\n }\n }\n } else { // get object and name from target data:\n autocompleteOptions.currentObject = obj as NamedNode\n autocompleteOptions.currentName = kb.any(autocompleteOptions.currentObject, labelProperty, null, doc) as Literal\n }\n\n lhs.appendChild(widgets.fieldLabel(dom, property as any, form))\n\n const barOptions = {\n editable,\n dbLookup: true\n }\n\n renderAutocompleteControl(dom, subject as NamedNode, barOptions, autocompleteOptions, addOneIdAndRefresh, deleteOne).then((control) => {\n rhs.appendChild(control)\n }, (err) => {\n rhs.appendChild(widgets.errorMessageBlock(dom, `Error rendering autocomplete ${form}: ${err}`, '#fee', err)) //\n })\n return box\n}\n\n// ends\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"autocompleteField.js","names":["autocompleteField","dom","container","already","subject","form","doc","callbackFunction","addOneIdAndRefresh","result","name","Error","oldValue","kb","the","property","oldName","any","labelProperty","equals","sameTerm","deletables","statementsMatching","concat","insertables","st","updater","updateMany","box","appendChild","widgets","errorMessageBlock","deleteOne","_result","_name","e2","termType","store","formDoc","createElement","lhs","setAttribute","style","formFieldNameBoxStyle","rhs","ns","ui","schema","dataSource","queryParams","label","anyJS","logo","targetClass","objectURIBase","undefined","endpoint","searchByNameQuery","insitituteDetailsQuery","searchByNameURI","suppressEmptyUneditable","editable","uri","autocompleteOptions","permanent","size","obj","currentObject","currentName","display","fieldLabel","barOptions","dbLookup","renderAutocompleteControl","then","control","err"],"sources":["../../../../src/widgets/forms/autocomplete/autocompleteField.ts"],"sourcesContent":["/* Form field for doing autocompleete\n */\nimport * as ns from '../../../ns'\nimport { store } from 'solid-logic'\nimport * as widgets from '../../../widgets'\nimport * as style from '../../../style'\nimport { renderAutocompleteControl } from './autocompleteBar'\nimport { QueryParameters } from './publicData'\nimport { NamedNode, BlankNode, Literal, Variable, st } from 'rdflib'\nimport { AutocompleteOptions } from './autocompletePicker'\n/**\n * Render a autocomplete form field\n *\n * The autocomplete form searches for an object in a definitive public database,\n * and allows the user to search for it by name, displaying a list of objects whose names match\n * the input to date, and letting the user either click on one of the list,\n * or just go on untill there is only one. The process then returns two values,\n * the URiI of the object and its name.\n *\n * @param dom The HTML Document object aka Document Object Model\n * @param container If present, the created widget will be appended to this\n * @param already A hash table of (form, subject) kept to prevent recursive forms looping\n * @param subject The thing about which the form displays/edits data\n * @param form The form or field to be rendered\n * @param doc The web document in which the data is\n * @param callbackFunction Called when data is changed so other parts can be refreshed.\n *\n * Form properties:\n * @param ui:property The property to store the object itself\n * @param ui:labelProperty The property used to store the name of the object\n * @param ui:category The class of objects to be searched, if fixed (else dep on class of subject)\n *\n * @returns The HTML widget created\n */\n// eslint-disable-next-line complexity\nexport function autocompleteField (\n dom: HTMLDocument,\n container: HTMLElement | undefined,\n already,\n subject: NamedNode | BlankNode | Variable,\n form: NamedNode,\n doc: NamedNode | undefined,\n callbackFunction: (_ok: boolean, _errorMessage: string) => void\n): HTMLElement {\n async function addOneIdAndRefresh (result:NamedNode | Literal, name: Literal) {\n if (!name) {\n throw new Error('autocompleteField: No name set.')\n }\n const oldValue = kb.the(subject, property as any, null, doc)\n if (oldValue) {\n const oldName = kb.any(oldValue as any, labelProperty as any, null, doc)\n if (oldValue.equals(result) && oldName && oldName.sameTerm(name)) {\n // console.log('No change: same values.')\n return\n }\n }\n const deletables = oldValue\n ? kb.statementsMatching(subject, property as any, oldValue, doc)\n .concat(kb.statementsMatching(oldValue as any, labelProperty as any, null, doc))\n : []\n // console.log('autocompleteField Deletables ' + deletables.map(st => st.toNT()))\n const insertables = [st(subject, property as any, result, doc),\n st(result as any, labelProperty as any, name, doc)] // @@ track the language of the name too!\n // console.log(`AC form: ${deletables.length} to delete and ${insertables.length} to insert`)\n try {\n // console.log('@@@ AC updating ', deletables, insertables)\n await kb.updater?.updateMany(deletables, insertables)\n } catch (err) {\n callbackFunction(false, err)\n box.appendChild(widgets.errorMessageBlock(dom, 'Autocomplete form data update error:' + err, null, err))\n return\n }\n callbackFunction(true, '')\n }\n\n async function deleteOne (_result:NamedNode | Literal, _name: Literal) {\n const oldValue = kb.the(subject, property as any, null, doc)\n if (!oldValue) {\n callbackFunction(false, 'NO data to elete')\n box.appendChild(widgets.errorMessageBlock(dom, 'Autocomplete delete: no old data!'))\n return\n }\n // const oldName = kb.any(oldValue as any, labelProperty as any, null, doc)\n const deletables = kb.statementsMatching(subject, property as any, oldValue, doc)\n .concat(kb.statementsMatching(oldValue as any, labelProperty as any, null, doc))\n // console.log('autocompleteField Deletables ' + deletables.map(st => st.toNT()))\n const insertables = []\n // console.log(`AC form delete: ${deletables.length} to delete and ${insertables.length} to insert`)\n try {\n // console.log('@@@ AC updating ', deletables, insertables)\n await kb.updater?.updateMany(deletables, insertables)\n } catch (err) {\n const e2 = new Error('Autocomplete form data delete error:' + err)\n callbackFunction(false, err)\n box.appendChild(widgets.errorMessageBlock(dom, e2, null, err))\n return\n }\n callbackFunction(true, '') // changed\n }\n\n if (subject.termType !== 'NamedNode') {\n throw new Error('Sorry this field only works on NamedNode subjects (for editable)')\n }\n const kb = store\n const formDoc = form.doc ? form.doc() : null // @@ if blank no way to know\n\n const box = dom.createElement('div')\n if (container) container.appendChild(box)\n const lhs = dom.createElement('div')\n lhs.setAttribute('class', 'formFieldName')\n lhs.setAttribute('style', style.formFieldNameBoxStyle)\n box.appendChild(lhs)\n const rhs = dom.createElement('div')\n rhs.setAttribute('class', 'formFieldValue')\n box.appendChild(rhs)\n\n const property = kb.any(form, ns.ui('property'))\n if (!property) {\n return box.appendChild(\n widgets.errorMessageBlock(dom, 'Error: No property given for autocomplete field: ' + form)\n )\n }\n const labelProperty = kb.any(form, ns.ui('labelProperty')) || ns.schema('name')\n\n // Parse the data source into query options\n\n const dataSource = kb.any(form, ns.ui('dataSource')) as NamedNode | undefined\n if (!dataSource) {\n // console.log('@@ connectedStatements ACF ', kb.connectedStatements(form).map(x => x.toNT()).join('\\n'))\n return box.appendChild(\n widgets.errorMessageBlock(dom, 'Error: No data source given for autocomplete field: ' + form)\n )\n }\n const queryParams:QueryParameters = {\n // targetClass: kb.any(dataSource, ns.ui('targetClass'), null, dataSource.doc()) as NamedNode | undefined,\n label: kb.anyJS(dataSource, ns.schema('name'), null, dataSource.doc()),\n logo: (kb.any(dataSource, ns.schema('logo'), null, dataSource.doc())) as NamedNode | undefined\n }\n\n // @@ Should we pass the target class in from the data source definition or use a current type of the subject\n const targetClass = (kb.any(form, ns.ui('targetClass'), null, form.doc()) || // class in form takes pecedence\n kb.any(dataSource, ns.ui('targetClass'), null, dataSource.doc())) as NamedNode | undefined\n if (targetClass) {\n queryParams.targetClass = targetClass\n }\n\n queryParams.objectURIBase = (kb.any(dataSource, ns.ui('objectURIBase'), null, dataSource.doc()) || undefined) as NamedNode | undefined\n\n /*\n if (!queryParams.targetClass) {\n const klass = kb.any(subject, ns.rdf('type')) as NamedNode | undefined\n // @@ be more selective of which class if many\n // @@ todo: Take ALL classes, and compare them with those the data source knows about\n // with translation where necessary. Find most specific of the classes for the search.\n if (!klass) throw new Error('Autocomplete: No class specified or is current type of' + subject)\n queryParams.targetClass = klass\n }\n */\n const endpoint = kb.anyJS(dataSource, ns.ui('endpoint'), null, dataSource.doc()) as string | undefined\n if (endpoint) { // SPARQL\n queryParams.endpoint = endpoint\n\n queryParams.searchByNameQuery = kb.anyJS(dataSource, ns.ui('searchByNameQuery'), null, dataSource.doc())\n if (!queryParams.searchByNameQuery) {\n return box.appendChild(\n widgets.errorMessageBlock(dom, 'Error: No searchByNameQuery given for endpoint data Source: ' + form))\n }\n queryParams.insitituteDetailsQuery = kb.anyJS(dataSource, ns.ui('insitituteDetailsQuery'), null, dataSource.doc())\n } else {\n // return box.appendChild(\n // widgets.errorMessageBlock(dom, 'Error: No SPARQL endpoint given for autocomplete field: ' + form))\n const searchByNameURI = kb.anyJS(dataSource, ns.ui('searchByNameURI'))\n if (!searchByNameURI) {\n return box.appendChild(\n widgets.errorMessageBlock(dom, 'Error: No searchByNameURI OR sparql endpoint given for dataSource: ' + dataSource)\n )\n }\n queryParams.searchByNameURI = searchByNameURI\n }\n // It can be cleaner to just remove empty fields if you can't edit them anyway\n const suppressEmptyUneditable = kb.anyJS(form, ns.ui('suppressEmptyUneditable'), null, formDoc)\n const editable = kb.updater?.editable((doc as NamedNode).uri)\n\n const autocompleteOptions:AutocompleteOptions = { // cancelButton?: HTMLElement,\n permanent: true,\n targetClass: queryParams.targetClass, // @@ simplify?\n queryParams\n }\n\n autocompleteOptions.size = kb.anyJS(form, ns.ui('size'), null, formDoc) || undefined\n\n let obj = kb.any(subject, property as any, undefined, doc)\n if (!obj) {\n obj = kb.any(form, ns.ui('default'))\n if (obj) {\n autocompleteOptions.currentObject = obj as NamedNode\n autocompleteOptions.currentName = kb.any(autocompleteOptions.currentObject, labelProperty, null, doc) as Literal\n } else { // No data or default. Should we suprress the whole field?\n if (suppressEmptyUneditable && !editable) {\n box.style.display = 'none' // clutter removal\n return box\n }\n }\n } else { // get object and name from target data:\n autocompleteOptions.currentObject = obj as NamedNode\n autocompleteOptions.currentName = kb.any(autocompleteOptions.currentObject, labelProperty, null, doc) as Literal\n }\n\n lhs.appendChild(widgets.fieldLabel(dom, property as any, form))\n\n const barOptions = {\n editable,\n dbLookup: true\n }\n\n renderAutocompleteControl(dom, subject as NamedNode, barOptions, autocompleteOptions, addOneIdAndRefresh, deleteOne).then((control) => {\n rhs.appendChild(control)\n }, (err) => {\n rhs.appendChild(widgets.errorMessageBlock(dom, `Error rendering autocomplete ${form}: ${err}`, '#fee', err)) //\n })\n return box\n}\n\n// ends\n"],"mappings":";;;;;;;;;;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAoE;AAAA;AARpE;AACA;;AASA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASA,iBAAiB,CAC/BC,GAAiB,EACjBC,SAAkC,EAClCC,OAAO,EACPC,OAAyC,EACzCC,IAAe,EACfC,GAA0B,EAC1BC,gBAA+D,EAClD;EAAA;EAAA,SACEC,kBAAkB;IAAA;EAAA;EAAA;IAAA,oGAAjC,iBAAmCC,MAA0B,EAAEC,IAAa;MAAA;MAAA;QAAA;UAAA;YAAA;cAAA,IACrEA,IAAI;gBAAA;gBAAA;cAAA;cAAA,MACD,IAAIC,KAAK,CAAC,kCAAkC,CAAC;YAAA;cAE/CC,QAAQ,GAAGC,EAAE,CAACC,GAAG,CAACV,OAAO,EAAEW,QAAQ,EAAS,IAAI,EAAET,GAAG,CAAC;cAAA,KACxDM,QAAQ;gBAAA;gBAAA;cAAA;cACJI,OAAO,GAAGH,EAAE,CAACI,GAAG,CAACL,QAAQ,EAASM,aAAa,EAAS,IAAI,EAAEZ,GAAG,CAAC;cAAA,MACpEM,QAAQ,CAACO,MAAM,CAACV,MAAM,CAAC,IAAIO,OAAO,IAAIA,OAAO,CAACI,QAAQ,CAACV,IAAI,CAAC;gBAAA;gBAAA;cAAA;cAAA;YAAA;cAK5DW,UAAU,GAAGT,QAAQ,GACvBC,EAAE,CAACS,kBAAkB,CAAClB,OAAO,EAAEW,QAAQ,EAASH,QAAQ,EAAEN,GAAG,CAAC,CAC7DiB,MAAM,CAACV,EAAE,CAACS,kBAAkB,CAACV,QAAQ,EAASM,aAAa,EAAS,IAAI,EAAEZ,GAAG,CAAC,CAAC,GAChF,EAAE,EACN;cACMkB,WAAW,GAAG,CAAC,IAAAC,UAAE,EAACrB,OAAO,EAAEW,QAAQ,EAASN,MAAM,EAAEH,GAAG,CAAC,EAC5D,IAAAmB,UAAE,EAAChB,MAAM,EAASS,aAAa,EAASR,IAAI,EAAEJ,GAAG,CAAC,CAAC,EAAC;cACtD;cAAA;cAAA;cAAA,uBAGQO,EAAE,CAACa,OAAO,iDAAV,aAAYC,UAAU,CAACN,UAAU,EAAEG,WAAW,CAAC;YAAA;cAAA;cAAA;YAAA;cAAA;cAAA;cAErDjB,gBAAgB,CAAC,KAAK,cAAM;cAC5BqB,GAAG,CAACC,WAAW,CAACC,OAAO,CAACC,iBAAiB,CAAC9B,GAAG,EAAE,sCAAsC,cAAM,EAAE,IAAI,cAAM,CAAC;cAAA;YAAA;cAG1GM,gBAAgB,CAAC,IAAI,EAAE,EAAE,CAAC;YAAA;YAAA;cAAA;UAAA;QAAA;MAAA;IAAA,CAC3B;IAAA;EAAA;EAAA,SAEcyB,SAAS;IAAA;EAAA;EAAA;IAAA,2FAAxB,kBAA0BC,OAA2B,EAAEC,KAAc;MAAA;MAAA;QAAA;UAAA;YAAA;cAC7DtB,QAAQ,GAAGC,EAAE,CAACC,GAAG,CAACV,OAAO,EAAEW,QAAQ,EAAS,IAAI,EAAET,GAAG,CAAC;cAAA,IACvDM,QAAQ;gBAAA;gBAAA;cAAA;cACXL,gBAAgB,CAAC,KAAK,EAAE,kBAAkB,CAAC;cAC3CqB,GAAG,CAACC,WAAW,CAACC,OAAO,CAACC,iBAAiB,CAAC9B,GAAG,EAAE,mCAAmC,CAAC,CAAC;cAAA;YAAA;cAGtF;cACMoB,UAAU,GAAGR,EAAE,CAACS,kBAAkB,CAAClB,OAAO,EAAEW,QAAQ,EAASH,QAAQ,EAAEN,GAAG,CAAC,CAC9EiB,MAAM,CAACV,EAAE,CAACS,kBAAkB,CAACV,QAAQ,EAASM,aAAa,EAAS,IAAI,EAAEZ,GAAG,CAAC,CAAC,EAClF;cACMkB,WAAW,GAAG,EAAE,EACtB;cAAA;cAAA;cAAA,uBAGQX,EAAE,CAACa,OAAO,iDAAV,aAAYC,UAAU,CAACN,UAAU,EAAEG,WAAW,CAAC;YAAA;cAAA;cAAA;YAAA;cAAA;cAAA;cAE/CW,EAAE,GAAG,IAAIxB,KAAK,CAAC,sCAAsC,eAAM,CAAC;cAClEJ,gBAAgB,CAAC,KAAK,eAAM;cAC5BqB,GAAG,CAACC,WAAW,CAACC,OAAO,CAACC,iBAAiB,CAAC9B,GAAG,EAAEkC,EAAE,EAAE,IAAI,eAAM,CAAC;cAAA;YAAA;cAGhE5B,gBAAgB,CAAC,IAAI,EAAE,EAAE,CAAC,EAAC;YAAA;YAAA;cAAA;UAAA;QAAA;MAAA;IAAA,CAC5B;IAAA;EAAA;EAED,IAAIH,OAAO,CAACgC,QAAQ,KAAK,WAAW,EAAE;IACpC,MAAM,IAAIzB,KAAK,CAAC,kEAAkE,CAAC;EACrF;EACA,IAAME,EAAE,GAAGwB,iBAAK;EAChB,IAAMC,OAAO,GAAGjC,IAAI,CAACC,GAAG,GAAGD,IAAI,CAACC,GAAG,EAAE,GAAG,IAAI,EAAC;;EAE7C,IAAMsB,GAAG,GAAG3B,GAAG,CAACsC,aAAa,CAAC,KAAK,CAAC;EACpC,IAAIrC,SAAS,EAAEA,SAAS,CAAC2B,WAAW,CAACD,GAAG,CAAC;EACzC,IAAMY,GAAG,GAAGvC,GAAG,CAACsC,aAAa,CAAC,KAAK,CAAC;EACpCC,GAAG,CAACC,YAAY,CAAC,OAAO,EAAE,eAAe,CAAC;EAC1CD,GAAG,CAACC,YAAY,CAAC,OAAO,EAAEC,KAAK,CAACC,qBAAqB,CAAC;EACtDf,GAAG,CAACC,WAAW,CAACW,GAAG,CAAC;EACpB,IAAMI,GAAG,GAAG3C,GAAG,CAACsC,aAAa,CAAC,KAAK,CAAC;EACpCK,GAAG,CAACH,YAAY,CAAC,OAAO,EAAE,gBAAgB,CAAC;EAC3Cb,GAAG,CAACC,WAAW,CAACe,GAAG,CAAC;EAEpB,IAAM7B,QAAQ,GAAGF,EAAE,CAACI,GAAG,CAACZ,IAAI,EAAEwC,EAAE,CAACC,EAAE,CAAC,UAAU,CAAC,CAAC;EAChD,IAAI,CAAC/B,QAAQ,EAAE;IACb,OAAOa,GAAG,CAACC,WAAW,CACpBC,OAAO,CAACC,iBAAiB,CAAC9B,GAAG,EAAE,mDAAmD,GAAGI,IAAI,CAAC,CAC3F;EACH;EACA,IAAMa,aAAa,GAAGL,EAAE,CAACI,GAAG,CAACZ,IAAI,EAAEwC,EAAE,CAACC,EAAE,CAAC,eAAe,CAAC,CAAC,IAAID,EAAE,CAACE,MAAM,CAAC,MAAM,CAAC;;EAE/E;;EAEA,IAAMC,UAAU,GAAGnC,EAAE,CAACI,GAAG,CAACZ,IAAI,EAAEwC,EAAE,CAACC,EAAE,CAAC,YAAY,CAAC,CAA0B;EAC7E,IAAI,CAACE,UAAU,EAAE;IACf;IACA,OAAOpB,GAAG,CAACC,WAAW,CACpBC,OAAO,CAACC,iBAAiB,CAAC9B,GAAG,EAAE,sDAAsD,GAAGI,IAAI,CAAC,CAC9F;EACH;EACA,IAAM4C,WAA2B,GAAG;IAClC;IACAC,KAAK,EAAErC,EAAE,CAACsC,KAAK,CAACH,UAAU,EAAEH,EAAE,CAACE,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAEC,UAAU,CAAC1C,GAAG,EAAE,CAAC;IACtE8C,IAAI,EAAGvC,EAAE,CAACI,GAAG,CAAC+B,UAAU,EAAEH,EAAE,CAACE,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAEC,UAAU,CAAC1C,GAAG,EAAE;EACrE,CAAC;;EAED;EACA,IAAM+C,WAAW,GAAIxC,EAAE,CAACI,GAAG,CAACZ,IAAI,EAAEwC,EAAE,CAACC,EAAE,CAAC,aAAa,CAAC,EAAE,IAAI,EAAEzC,IAAI,CAACC,GAAG,EAAE,CAAC;EAAI;EACzEO,EAAE,CAACI,GAAG,CAAC+B,UAAU,EAAEH,EAAE,CAACC,EAAE,CAAC,aAAa,CAAC,EAAE,IAAI,EAAEE,UAAU,CAAC1C,GAAG,EAAE,CAA2B;EAC9F,IAAI+C,WAAW,EAAE;IACfJ,WAAW,CAACI,WAAW,GAAGA,WAAW;EACvC;EAEAJ,WAAW,CAACK,aAAa,GAAIzC,EAAE,CAACI,GAAG,CAAC+B,UAAU,EAAEH,EAAE,CAACC,EAAE,CAAC,eAAe,CAAC,EAAE,IAAI,EAAEE,UAAU,CAAC1C,GAAG,EAAE,CAAC,IAAIiD,SAAmC;;EAEtI;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,IAAMC,QAAQ,GAAG3C,EAAE,CAACsC,KAAK,CAACH,UAAU,EAAEH,EAAE,CAACC,EAAE,CAAC,UAAU,CAAC,EAAE,IAAI,EAAEE,UAAU,CAAC1C,GAAG,EAAE,CAAuB;EACtG,IAAIkD,QAAQ,EAAE;IAAE;IACdP,WAAW,CAACO,QAAQ,GAAGA,QAAQ;IAE/BP,WAAW,CAACQ,iBAAiB,GAAG5C,EAAE,CAACsC,KAAK,CAACH,UAAU,EAAEH,EAAE,CAACC,EAAE,CAAC,mBAAmB,CAAC,EAAE,IAAI,EAAEE,UAAU,CAAC1C,GAAG,EAAE,CAAC;IACxG,IAAI,CAAC2C,WAAW,CAACQ,iBAAiB,EAAE;MAClC,OAAO7B,GAAG,CAACC,WAAW,CACpBC,OAAO,CAACC,iBAAiB,CAAC9B,GAAG,EAAE,8DAA8D,GAAGI,IAAI,CAAC,CAAC;IAC1G;IACA4C,WAAW,CAACS,sBAAsB,GAAG7C,EAAE,CAACsC,KAAK,CAACH,UAAU,EAAEH,EAAE,CAACC,EAAE,CAAC,wBAAwB,CAAC,EAAE,IAAI,EAAEE,UAAU,CAAC1C,GAAG,EAAE,CAAC;EACpH,CAAC,MAAM;IACL;IACA;IACA,IAAMqD,eAAe,GAAG9C,EAAE,CAACsC,KAAK,CAACH,UAAU,EAAEH,EAAE,CAACC,EAAE,CAAC,iBAAiB,CAAC,CAAC;IACtE,IAAI,CAACa,eAAe,EAAE;MACpB,OAAO/B,GAAG,CAACC,WAAW,CACpBC,OAAO,CAACC,iBAAiB,CAAC9B,GAAG,EAAE,qEAAqE,GAAG+C,UAAU,CAAC,CACnH;IACH;IACAC,WAAW,CAACU,eAAe,GAAGA,eAAe;EAC/C;EACA;EACA,IAAMC,uBAAuB,GAAG/C,EAAE,CAACsC,KAAK,CAAC9C,IAAI,EAAEwC,EAAE,CAACC,EAAE,CAAC,yBAAyB,CAAC,EAAE,IAAI,EAAER,OAAO,CAAC;EAC/F,IAAMuB,QAAQ,kBAAGhD,EAAE,CAACa,OAAO,gDAAV,YAAYmC,QAAQ,CAAEvD,GAAG,CAAewD,GAAG,CAAC;EAE7D,IAAMC,mBAAuC,GAAG;IAAE;IAChDC,SAAS,EAAE,IAAI;IACfX,WAAW,EAAEJ,WAAW,CAACI,WAAW;IAAE;IACtCJ,WAAW,EAAXA;EACF,CAAC;EAEDc,mBAAmB,CAACE,IAAI,GAAGpD,EAAE,CAACsC,KAAK,CAAC9C,IAAI,EAAEwC,EAAE,CAACC,EAAE,CAAC,MAAM,CAAC,EAAE,IAAI,EAAER,OAAO,CAAC,IAAIiB,SAAS;EAEpF,IAAIW,GAAG,GAAGrD,EAAE,CAACI,GAAG,CAACb,OAAO,EAAEW,QAAQ,EAASwC,SAAS,EAAEjD,GAAG,CAAC;EAC1D,IAAI,CAAC4D,GAAG,EAAE;IACRA,GAAG,GAAGrD,EAAE,CAACI,GAAG,CAACZ,IAAI,EAAEwC,EAAE,CAACC,EAAE,CAAC,SAAS,CAAC,CAAC;IACpC,IAAIoB,GAAG,EAAE;MACPH,mBAAmB,CAACI,aAAa,GAAGD,GAAgB;MACpDH,mBAAmB,CAACK,WAAW,GAAGvD,EAAE,CAACI,GAAG,CAAC8C,mBAAmB,CAACI,aAAa,EAAEjD,aAAa,EAAE,IAAI,EAAEZ,GAAG,CAAY;IAClH,CAAC,MAAM;MAAE;MACP,IAAIsD,uBAAuB,IAAI,CAACC,QAAQ,EAAE;QACxCjC,GAAG,CAACc,KAAK,CAAC2B,OAAO,GAAG,MAAM,EAAC;QAC3B,OAAOzC,GAAG;MACZ;IACF;EACF,CAAC,MAAM;IAAE;IACPmC,mBAAmB,CAACI,aAAa,GAAGD,GAAgB;IACpDH,mBAAmB,CAACK,WAAW,GAAGvD,EAAE,CAACI,GAAG,CAAC8C,mBAAmB,CAACI,aAAa,EAAEjD,aAAa,EAAE,IAAI,EAAEZ,GAAG,CAAY;EAClH;EAEAkC,GAAG,CAACX,WAAW,CAACC,OAAO,CAACwC,UAAU,CAACrE,GAAG,EAAEc,QAAQ,EAASV,IAAI,CAAC,CAAC;EAE/D,IAAMkE,UAAU,GAAG;IACjBV,QAAQ,EAARA,QAAQ;IACRW,QAAQ,EAAE;EACZ,CAAC;EAED,IAAAC,0CAAyB,EAACxE,GAAG,EAAEG,OAAO,EAAemE,UAAU,EAAER,mBAAmB,EAAEvD,kBAAkB,EAAEwB,SAAS,CAAC,CAAC0C,IAAI,CAAC,UAACC,OAAO,EAAK;IACrI/B,GAAG,CAACf,WAAW,CAAC8C,OAAO,CAAC;EAC1B,CAAC,EAAE,UAACC,GAAG,EAAK;IACVhC,GAAG,CAACf,WAAW,CAACC,OAAO,CAACC,iBAAiB,CAAC9B,GAAG,yCAAkCI,IAAI,eAAKuE,GAAG,GAAI,MAAM,EAAEA,GAAG,CAAC,CAAC,EAAC;EAC/G,CAAC,CAAC;;EACF,OAAOhD,GAAG;AACZ;;AAEA"}
|
|
@@ -1,46 +1,29 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
4
|
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
6
|
-
|
|
7
5
|
Object.defineProperty(exports, "__esModule", {
|
|
8
6
|
value: true
|
|
9
7
|
});
|
|
10
8
|
exports.renderAutoComplete = renderAutoComplete;
|
|
11
9
|
exports.setVisible = setVisible;
|
|
12
|
-
|
|
13
10
|
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
14
|
-
|
|
15
11
|
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
16
|
-
|
|
17
12
|
var debug = _interopRequireWildcard(require("../../../debug"));
|
|
18
|
-
|
|
19
13
|
var style = _interopRequireWildcard(require("../../../style"));
|
|
20
|
-
|
|
21
14
|
var widgets = _interopRequireWildcard(require("../../../widgets"));
|
|
22
|
-
|
|
23
15
|
var _solidLogic = require("solid-logic");
|
|
24
|
-
|
|
25
16
|
var _publicData = require("./publicData");
|
|
26
|
-
|
|
27
17
|
var _language = require("./language");
|
|
28
|
-
|
|
29
18
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
30
|
-
|
|
31
19
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
32
|
-
|
|
33
20
|
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
|
|
34
|
-
|
|
35
21
|
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
36
|
-
|
|
37
22
|
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
38
|
-
|
|
39
23
|
var AUTOCOMPLETE_THRESHOLD = 4; // don't check until this many characters typed
|
|
40
|
-
|
|
41
24
|
var AUTOCOMPLETE_ROWS = 20; // 20?
|
|
42
|
-
|
|
43
25
|
var AUTOCOMPLETE_ROWS_STRETCH = 40;
|
|
26
|
+
|
|
44
27
|
/*
|
|
45
28
|
Autocomplete happens in 6 phases:
|
|
46
29
|
1. The search string is too small to bother
|
|
@@ -56,19 +39,16 @@ Autocomplete happens in 6 phases:
|
|
|
56
39
|
|
|
57
40
|
function setVisible(element, visible) {
|
|
58
41
|
element.style.display = visible ? '' : 'none'; // Do not use visibility, it holds the real estate
|
|
59
|
-
}
|
|
60
|
-
|
|
42
|
+
}
|
|
61
43
|
|
|
44
|
+
// The core of the autocomplete UI
|
|
62
45
|
function renderAutoComplete(_x, _x2, _x3, _x4) {
|
|
63
46
|
return _renderAutoComplete.apply(this, arguments);
|
|
64
47
|
} // renderAutoComplete
|
|
65
48
|
// ENDS
|
|
66
|
-
|
|
67
|
-
|
|
68
49
|
function _renderAutoComplete() {
|
|
69
50
|
_renderAutoComplete = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee8(dom, acOptions, decoration, callback) {
|
|
70
51
|
var complain, finish, gotIt, _gotIt, acceptButtonHandler, _acceptButtonHandler, cancelButtonHandler, _cancelButtonHandler, nameMatch, clearList, inputEventHHandler, _inputEventHHandler, loadBindingsAndFilterByLanguage, _loadBindingsAndFilterByLanguage, filterByName, refreshList, _refreshList, initialize, targetClass, lastBindings, loadedEnough, inputEventHandlerLock, allDisplayed, lastFilter, numberOfRows, div, foundName, foundObject, table, head, cell, searchInput, size, searchInputStyle;
|
|
71
|
-
|
|
72
52
|
return _regenerator["default"].wrap(function _callee8$(_context8) {
|
|
73
53
|
while (1) {
|
|
74
54
|
switch (_context8.prev = _context8.next) {
|
|
@@ -85,11 +65,9 @@ function _renderAutoComplete() {
|
|
|
85
65
|
lastFilter = undefined;
|
|
86
66
|
foundObject = undefined;
|
|
87
67
|
}
|
|
88
|
-
|
|
89
68
|
if (decoration.deleteButton) {
|
|
90
69
|
setVisible(decoration.deleteButton, !!acOptions.currentObject);
|
|
91
70
|
}
|
|
92
|
-
|
|
93
71
|
if (decoration.acceptButton) {
|
|
94
72
|
setVisible(decoration.acceptButton, false); // hide until input complete
|
|
95
73
|
}
|
|
@@ -97,7 +75,6 @@ function _renderAutoComplete() {
|
|
|
97
75
|
if (decoration.editButton) {
|
|
98
76
|
setVisible(decoration.editButton, true);
|
|
99
77
|
}
|
|
100
|
-
|
|
101
78
|
if (decoration.cancelButton) {
|
|
102
79
|
setVisible(decoration.cancelButton, false); // only allow cancel when there is something to cancel
|
|
103
80
|
}
|
|
@@ -105,11 +82,9 @@ function _renderAutoComplete() {
|
|
|
105
82
|
inputEventHandlerLock = false;
|
|
106
83
|
clearList();
|
|
107
84
|
};
|
|
108
|
-
|
|
109
85
|
_refreshList = function _refreshList3() {
|
|
110
86
|
_refreshList = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee7() {
|
|
111
87
|
var rowForBinding, compareBindingsByName, languagePrefs, filter, slimmed, displayable, _iterator, _step, binding;
|
|
112
|
-
|
|
113
88
|
return _regenerator["default"].wrap(function _callee7$(_context7) {
|
|
114
89
|
while (1) {
|
|
115
90
|
switch (_context7.prev = _context7.next) {
|
|
@@ -117,13 +92,11 @@ function _renderAutoComplete() {
|
|
|
117
92
|
compareBindingsByName = function _compareBindingsByNam(self, other) {
|
|
118
93
|
return other.name.value > self.name.value ? 1 : other.name.name < self.name.value ? -1 : 0;
|
|
119
94
|
};
|
|
120
|
-
|
|
121
95
|
rowForBinding = function _rowForBinding(binding) {
|
|
122
96
|
var row = dom.createElement('tr');
|
|
123
97
|
style.setStyle(row, 'autocompleteRowStyle');
|
|
124
98
|
row.setAttribute('style', 'padding: 0.3em;');
|
|
125
99
|
row.style.color = allDisplayed ? '#080' : '#088'; // green means 'you should find it here'
|
|
126
|
-
|
|
127
100
|
row.textContent = binding.name.value;
|
|
128
101
|
var object = (0, _publicData.bindingToTerm)(binding.subject);
|
|
129
102
|
var nameTerm = (0, _publicData.bindingToTerm)(binding.name);
|
|
@@ -135,11 +108,9 @@ function _renderAutoComplete() {
|
|
|
135
108
|
case 0:
|
|
136
109
|
debug.log(' click row textContent: ' + row.textContent);
|
|
137
110
|
debug.log(' click name: ' + nameTerm.value);
|
|
138
|
-
|
|
139
111
|
if (object && nameTerm) {
|
|
140
112
|
gotIt(object, nameTerm);
|
|
141
113
|
}
|
|
142
|
-
|
|
143
114
|
case 3:
|
|
144
115
|
case "end":
|
|
145
116
|
return _context6.stop();
|
|
@@ -147,61 +118,49 @@ function _renderAutoComplete() {
|
|
|
147
118
|
}
|
|
148
119
|
}, _callee6);
|
|
149
120
|
}));
|
|
150
|
-
|
|
151
121
|
return function (_x12) {
|
|
152
122
|
return _ref.apply(this, arguments);
|
|
153
123
|
};
|
|
154
124
|
}());
|
|
155
125
|
return row;
|
|
156
126
|
};
|
|
157
|
-
|
|
158
127
|
if (!inputEventHandlerLock) {
|
|
159
128
|
_context7.next = 5;
|
|
160
129
|
break;
|
|
161
130
|
}
|
|
162
|
-
|
|
163
131
|
debug.log("Ignoring \"".concat(searchInput.value, "\" because of lock "));
|
|
164
132
|
return _context7.abrupt("return");
|
|
165
|
-
|
|
166
133
|
case 5:
|
|
167
134
|
debug.log("Setting lock at \"".concat(searchInput.value, "\""));
|
|
168
135
|
inputEventHandlerLock = true;
|
|
169
136
|
_context7.next = 9;
|
|
170
137
|
return (0, _language.getPreferredLanguages)();
|
|
171
|
-
|
|
172
138
|
case 9:
|
|
173
139
|
languagePrefs = _context7.sent;
|
|
174
140
|
filter = searchInput.value.trim().toLowerCase();
|
|
175
|
-
|
|
176
141
|
if (!(filter.length < AUTOCOMPLETE_THRESHOLD)) {
|
|
177
142
|
_context7.next = 16;
|
|
178
143
|
break;
|
|
179
144
|
}
|
|
180
|
-
|
|
181
145
|
// too small
|
|
182
|
-
clearList();
|
|
183
|
-
|
|
146
|
+
clearList();
|
|
147
|
+
// candidatesLoaded = false
|
|
184
148
|
numberOfRows = AUTOCOMPLETE_ROWS;
|
|
185
149
|
_context7.next = 31;
|
|
186
150
|
break;
|
|
187
|
-
|
|
188
151
|
case 16:
|
|
189
152
|
if (!(!allDisplayed || !lastFilter || !filter.startsWith(lastFilter))) {
|
|
190
153
|
_context7.next = 21;
|
|
191
154
|
break;
|
|
192
155
|
}
|
|
193
|
-
|
|
194
156
|
debug.log(" Querying database at \"".concat(filter, "\" cf last \"").concat(lastFilter, "\"."));
|
|
195
157
|
_context7.next = 20;
|
|
196
158
|
return loadBindingsAndFilterByLanguage(filter, languagePrefs);
|
|
197
|
-
|
|
198
159
|
case 20:
|
|
199
160
|
lastBindings = _context7.sent;
|
|
200
|
-
|
|
201
161
|
case 21:
|
|
202
162
|
// Trim table as search gets tighter:
|
|
203
163
|
slimmed = filterByName(filter, lastBindings);
|
|
204
|
-
|
|
205
164
|
if (loadedEnough && slimmed.length <= AUTOCOMPLETE_ROWS_STRETCH) {
|
|
206
165
|
numberOfRows = slimmed.length; // stretch if it means we get all items
|
|
207
166
|
}
|
|
@@ -212,7 +171,6 @@ function _renderAutoComplete() {
|
|
|
212
171
|
displayable.sort(compareBindingsByName);
|
|
213
172
|
clearList();
|
|
214
173
|
_iterator = _createForOfIteratorHelper(displayable);
|
|
215
|
-
|
|
216
174
|
try {
|
|
217
175
|
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
218
176
|
binding = _step.value;
|
|
@@ -223,15 +181,12 @@ function _renderAutoComplete() {
|
|
|
223
181
|
} finally {
|
|
224
182
|
_iterator.f();
|
|
225
183
|
}
|
|
226
|
-
|
|
227
184
|
if (slimmed.length === 1) {
|
|
228
185
|
gotIt((0, _publicData.bindingToTerm)(slimmed[0].subject), (0, _publicData.bindingToTerm)(slimmed[0].name));
|
|
229
186
|
}
|
|
230
|
-
|
|
231
187
|
case 31:
|
|
232
188
|
// else
|
|
233
189
|
inputEventHandlerLock = false;
|
|
234
|
-
|
|
235
190
|
case 32:
|
|
236
191
|
case "end":
|
|
237
192
|
return _context7.stop();
|
|
@@ -241,17 +196,14 @@ function _renderAutoComplete() {
|
|
|
241
196
|
}));
|
|
242
197
|
return _refreshList.apply(this, arguments);
|
|
243
198
|
};
|
|
244
|
-
|
|
245
199
|
refreshList = function _refreshList2() {
|
|
246
200
|
return _refreshList.apply(this, arguments);
|
|
247
201
|
};
|
|
248
|
-
|
|
249
202
|
filterByName = function _filterByName(filter, bindings) {
|
|
250
203
|
return bindings.filter(function (binding) {
|
|
251
204
|
return nameMatch(filter, binding.name.value);
|
|
252
205
|
});
|
|
253
206
|
};
|
|
254
|
-
|
|
255
207
|
_loadBindingsAndFilterByLanguage = function _loadBindingsAndFilte2() {
|
|
256
208
|
_loadBindingsAndFilterByLanguage = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee5(filter, languagePrefs) {
|
|
257
209
|
var bindings, slimmed;
|
|
@@ -262,32 +214,26 @@ function _renderAutoComplete() {
|
|
|
262
214
|
_context5.prev = 0;
|
|
263
215
|
_context5.next = 3;
|
|
264
216
|
return (0, _publicData.queryPublicDataByName)(filter, targetClass, languagePrefs || _language.defaultPreferredLanguages, acOptions.queryParams);
|
|
265
|
-
|
|
266
217
|
case 3:
|
|
267
218
|
bindings = _context5.sent;
|
|
268
219
|
_context5.next = 11;
|
|
269
220
|
break;
|
|
270
|
-
|
|
271
221
|
case 6:
|
|
272
222
|
_context5.prev = 6;
|
|
273
223
|
_context5.t0 = _context5["catch"](0);
|
|
274
224
|
complain('Error querying db of organizations: ' + _context5.t0);
|
|
275
225
|
inputEventHandlerLock = false;
|
|
276
226
|
return _context5.abrupt("return");
|
|
277
|
-
|
|
278
227
|
case 11:
|
|
279
228
|
loadedEnough = bindings.length < _publicData.AUTOCOMPLETE_LIMIT;
|
|
280
|
-
|
|
281
229
|
if (loadedEnough) {
|
|
282
230
|
lastFilter = filter;
|
|
283
231
|
} else {
|
|
284
232
|
lastFilter = undefined;
|
|
285
233
|
}
|
|
286
|
-
|
|
287
234
|
clearList();
|
|
288
235
|
slimmed = (0, _language.filterByLanguage)(bindings, languagePrefs);
|
|
289
236
|
return _context5.abrupt("return", slimmed);
|
|
290
|
-
|
|
291
237
|
case 16:
|
|
292
238
|
case "end":
|
|
293
239
|
return _context5.stop();
|
|
@@ -297,11 +243,9 @@ function _renderAutoComplete() {
|
|
|
297
243
|
}));
|
|
298
244
|
return _loadBindingsAndFilterByLanguage.apply(this, arguments);
|
|
299
245
|
};
|
|
300
|
-
|
|
301
246
|
loadBindingsAndFilterByLanguage = function _loadBindingsAndFilte(_x10, _x11) {
|
|
302
247
|
return _loadBindingsAndFilterByLanguage.apply(this, arguments);
|
|
303
248
|
};
|
|
304
|
-
|
|
305
249
|
_inputEventHHandler = function _inputEventHHandler3() {
|
|
306
250
|
_inputEventHHandler = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4(_event) {
|
|
307
251
|
return _regenerator["default"].wrap(function _callee4$(_context4) {
|
|
@@ -310,16 +254,13 @@ function _renderAutoComplete() {
|
|
|
310
254
|
case 0:
|
|
311
255
|
// console.log('@@ AC inputEventHHandler called')
|
|
312
256
|
setVisible(decoration.cancelButton, true); // only allow cancel when there is something to cancel
|
|
313
|
-
|
|
314
257
|
refreshList(); /// @@ debounqce does not work with jest
|
|
315
|
-
|
|
316
258
|
/*
|
|
317
259
|
if (runningTimeout) {
|
|
318
260
|
clearTimeout(runningTimeout)
|
|
319
261
|
}
|
|
320
262
|
runningTimeout = setTimeout(refreshList, AUTOCOMPLETE_DEBOUNCE_MS)
|
|
321
263
|
*/
|
|
322
|
-
|
|
323
264
|
case 2:
|
|
324
265
|
case "end":
|
|
325
266
|
return _context4.stop();
|
|
@@ -329,28 +270,22 @@ function _renderAutoComplete() {
|
|
|
329
270
|
}));
|
|
330
271
|
return _inputEventHHandler.apply(this, arguments);
|
|
331
272
|
};
|
|
332
|
-
|
|
333
273
|
inputEventHHandler = function _inputEventHHandler2(_x9) {
|
|
334
274
|
return _inputEventHHandler.apply(this, arguments);
|
|
335
275
|
};
|
|
336
|
-
|
|
337
276
|
clearList = function _clearList() {
|
|
338
277
|
while (table.children.length > 1) {
|
|
339
278
|
table.removeChild(table.lastChild);
|
|
340
279
|
}
|
|
341
280
|
};
|
|
342
|
-
|
|
343
281
|
nameMatch = function _nameMatch(filter, candidate) {
|
|
344
282
|
var parts = filter.split(' '); // Each name part must be somewhere
|
|
345
|
-
|
|
346
283
|
for (var j = 0; j < parts.length; j++) {
|
|
347
284
|
var word = parts[j];
|
|
348
285
|
if (candidate.toLowerCase().indexOf(word) < 0) return false;
|
|
349
286
|
}
|
|
350
|
-
|
|
351
287
|
return true;
|
|
352
288
|
};
|
|
353
|
-
|
|
354
289
|
_cancelButtonHandler = function _cancelButtonHandler3() {
|
|
355
290
|
_cancelButtonHandler = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3(_event) {
|
|
356
291
|
return _regenerator["default"].wrap(function _callee3$(_context3) {
|
|
@@ -358,7 +293,6 @@ function _renderAutoComplete() {
|
|
|
358
293
|
switch (_context3.prev = _context3.next) {
|
|
359
294
|
case 0:
|
|
360
295
|
debug.log('Auto complete: Canceled by user! ');
|
|
361
|
-
|
|
362
296
|
if (acOptions.permanent) {
|
|
363
297
|
initialize();
|
|
364
298
|
} else {
|
|
@@ -366,7 +300,6 @@ function _renderAutoComplete() {
|
|
|
366
300
|
div.parentNode.removeChild(div);
|
|
367
301
|
}
|
|
368
302
|
}
|
|
369
|
-
|
|
370
303
|
case 2:
|
|
371
304
|
case "end":
|
|
372
305
|
return _context3.stop();
|
|
@@ -376,11 +309,9 @@ function _renderAutoComplete() {
|
|
|
376
309
|
}));
|
|
377
310
|
return _cancelButtonHandler.apply(this, arguments);
|
|
378
311
|
};
|
|
379
|
-
|
|
380
312
|
cancelButtonHandler = function _cancelButtonHandler2(_x8) {
|
|
381
313
|
return _cancelButtonHandler.apply(this, arguments);
|
|
382
314
|
};
|
|
383
|
-
|
|
384
315
|
_acceptButtonHandler = function _acceptButtonHandler3() {
|
|
385
316
|
_acceptButtonHandler = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2(_event) {
|
|
386
317
|
return _regenerator["default"].wrap(function _callee2$(_context2) {
|
|
@@ -391,7 +322,6 @@ function _renderAutoComplete() {
|
|
|
391
322
|
// still
|
|
392
323
|
finish(foundObject, foundName);
|
|
393
324
|
}
|
|
394
|
-
|
|
395
325
|
case 1:
|
|
396
326
|
case "end":
|
|
397
327
|
return _context2.stop();
|
|
@@ -401,11 +331,9 @@ function _renderAutoComplete() {
|
|
|
401
331
|
}));
|
|
402
332
|
return _acceptButtonHandler.apply(this, arguments);
|
|
403
333
|
};
|
|
404
|
-
|
|
405
334
|
acceptButtonHandler = function _acceptButtonHandler2(_x7) {
|
|
406
335
|
return _acceptButtonHandler.apply(this, arguments);
|
|
407
336
|
};
|
|
408
|
-
|
|
409
337
|
_gotIt = function _gotIt3() {
|
|
410
338
|
_gotIt = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(object, name) {
|
|
411
339
|
return _regenerator["default"].wrap(function _callee$(_context) {
|
|
@@ -416,24 +344,18 @@ function _renderAutoComplete() {
|
|
|
416
344
|
_context.next = 10;
|
|
417
345
|
break;
|
|
418
346
|
}
|
|
419
|
-
|
|
420
347
|
decoration.acceptButton.disbaled = false;
|
|
421
348
|
setVisible(decoration.acceptButton, true); // now wait for confirmation
|
|
422
|
-
|
|
423
349
|
searchInput.value = name.value; // complete it
|
|
424
|
-
|
|
425
350
|
foundName = name;
|
|
426
351
|
foundObject = object;
|
|
427
352
|
debug.log('Auto complete: name: ' + name);
|
|
428
353
|
debug.log('Auto complete: waiting for accept ' + object);
|
|
429
354
|
clearList(); // This may be an option - nice and clean but does not allow change of mind
|
|
430
|
-
|
|
431
355
|
return _context.abrupt("return");
|
|
432
|
-
|
|
433
356
|
case 10:
|
|
434
357
|
setVisible(decoration.cancelButton, true);
|
|
435
358
|
finish(object, name);
|
|
436
|
-
|
|
437
359
|
case 12:
|
|
438
360
|
case "end":
|
|
439
361
|
return _context.stop();
|
|
@@ -443,73 +365,60 @@ function _renderAutoComplete() {
|
|
|
443
365
|
}));
|
|
444
366
|
return _gotIt.apply(this, arguments);
|
|
445
367
|
};
|
|
446
|
-
|
|
447
368
|
gotIt = function _gotIt2(_x5, _x6) {
|
|
448
369
|
return _gotIt.apply(this, arguments);
|
|
449
370
|
};
|
|
450
|
-
|
|
451
371
|
finish = function _finish(object, name) {
|
|
452
372
|
debug.log('Auto complete: finish! ' + object);
|
|
453
|
-
|
|
454
373
|
if (object.termType === 'Literal' && acOptions.queryParams.objectURIBase) {
|
|
455
374
|
object = _solidLogic.store.sym(acOptions.queryParams.objectURIBase.value + object.value);
|
|
456
|
-
}
|
|
375
|
+
}
|
|
376
|
+
// remove(decoration.cancelButton)
|
|
457
377
|
// remove(decoration.acceptButton)
|
|
458
378
|
// remove(div)
|
|
459
|
-
|
|
460
|
-
|
|
461
379
|
clearList();
|
|
462
380
|
callback(object, name);
|
|
463
381
|
};
|
|
464
|
-
|
|
465
382
|
complain = function _complain(message) {
|
|
466
383
|
var errorRow = table.appendChild(dom.createElement('tr'));
|
|
467
384
|
debug.log(message);
|
|
468
385
|
var err = new Error(message);
|
|
469
|
-
errorRow.appendChild(widgets.errorMessageBlock(dom, err, 'pink'));
|
|
470
|
-
|
|
386
|
+
errorRow.appendChild(widgets.errorMessageBlock(dom, err, 'pink'));
|
|
387
|
+
// errorMessageBlock will log the stack to the console
|
|
471
388
|
style.setStyle(errorRow, 'autocompleteRowStyle');
|
|
472
389
|
errorRow.style.padding = '1em';
|
|
473
390
|
};
|
|
474
|
-
|
|
475
391
|
// initialiize
|
|
476
392
|
// const queryParams: QueryParameters = acOptions.queryParams
|
|
477
393
|
targetClass = acOptions.targetClass;
|
|
478
|
-
|
|
479
394
|
if (targetClass) {
|
|
480
395
|
_context8.next = 21;
|
|
481
396
|
break;
|
|
482
397
|
}
|
|
483
|
-
|
|
484
398
|
throw new Error('renderAutoComplete: missing targetClass');
|
|
485
|
-
|
|
486
399
|
case 21:
|
|
487
400
|
// console.log(`renderAutoComplete: targetClass=${targetClass}` )
|
|
488
401
|
if (decoration.acceptButton) {
|
|
489
402
|
decoration.acceptButton.addEventListener('click', acceptButtonHandler, false);
|
|
490
403
|
}
|
|
491
|
-
|
|
492
404
|
if (decoration.cancelButton) {
|
|
493
405
|
decoration.cancelButton.addEventListener('click', cancelButtonHandler, false);
|
|
494
|
-
}
|
|
495
|
-
|
|
406
|
+
}
|
|
496
407
|
|
|
408
|
+
// var candidatesLoaded = false
|
|
497
409
|
loadedEnough = false;
|
|
498
410
|
inputEventHandlerLock = false;
|
|
499
411
|
allDisplayed = false;
|
|
500
412
|
lastFilter = undefined;
|
|
501
413
|
numberOfRows = AUTOCOMPLETE_ROWS; // this gets slimmed down
|
|
502
|
-
|
|
503
414
|
div = dom.createElement('div');
|
|
504
415
|
foundName = undefined; // once found accepted string must match this
|
|
505
|
-
|
|
506
416
|
foundObject = undefined;
|
|
507
417
|
table = div.appendChild(dom.createElement('table'));
|
|
508
418
|
table.setAttribute('data-testid', 'autocomplete-table');
|
|
509
419
|
table.setAttribute('style', 'max-width: 30em; margin: 0.5em;');
|
|
510
420
|
head = table.appendChild(dom.createElement('tr'));
|
|
511
421
|
style.setStyle(head, 'autocompleteRowStyle'); // textInputStyle or
|
|
512
|
-
|
|
513
422
|
cell = head.appendChild(dom.createElement('td'));
|
|
514
423
|
searchInput = cell.appendChild(dom.createElement('input'));
|
|
515
424
|
searchInput.setAttribute('type', 'text');
|
|
@@ -517,19 +426,18 @@ function _renderAutoComplete() {
|
|
|
517
426
|
size = acOptions.size || style.textInputSize || 20;
|
|
518
427
|
searchInput.setAttribute('size', size);
|
|
519
428
|
searchInput.setAttribute('data-testid', 'autocomplete-input');
|
|
520
|
-
searchInputStyle = style.textInputStyle ||
|
|
429
|
+
searchInputStyle = style.textInputStyle ||
|
|
430
|
+
// searchInputStyle ?
|
|
521
431
|
'border: 0.1em solid #444; border-radius: 0.5em; width: 100%; font-size: 100%; padding: 0.1em 0.6em'; // @
|
|
522
|
-
|
|
523
432
|
searchInput.setAttribute('style', searchInputStyle);
|
|
524
433
|
searchInput.addEventListener('keyup', function (event) {
|
|
525
434
|
if (event.keyCode === 13) {
|
|
526
435
|
acceptButtonHandler(event);
|
|
527
436
|
}
|
|
528
437
|
}, false);
|
|
529
|
-
searchInput.addEventListener('input', inputEventHHandler);
|
|
530
|
-
|
|
438
|
+
searchInput.addEventListener('input', inputEventHHandler);
|
|
439
|
+
// console.log('@@ renderAutoComplete returns ' + div.innerHTML)
|
|
531
440
|
return _context8.abrupt("return", div);
|
|
532
|
-
|
|
533
441
|
case 48:
|
|
534
442
|
case "end":
|
|
535
443
|
return _context8.stop();
|