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.
Files changed (136) hide show
  1. package/dist/main.js +2159 -5039
  2. package/dist/main.js.map +1 -1
  3. package/lib/acl/access-controller.js +4 -67
  4. package/lib/acl/access-controller.js.map +1 -1
  5. package/lib/acl/access-groups.js +59 -137
  6. package/lib/acl/access-groups.js.map +1 -1
  7. package/lib/acl/acl-control.js +14 -54
  8. package/lib/acl/acl-control.js.map +1 -1
  9. package/lib/acl/acl.js +32 -107
  10. package/lib/acl/acl.js.map +1 -1
  11. package/lib/acl/add-agent-buttons.js +0 -92
  12. package/lib/acl/add-agent-buttons.js.map +1 -1
  13. package/lib/acl/index.js +1 -3
  14. package/lib/acl/index.js.map +1 -1
  15. package/lib/acl/styles.js +1 -2
  16. package/lib/acl/styles.js.map +1 -1
  17. package/lib/chat/bookmarks.js +8 -80
  18. package/lib/chat/bookmarks.js.map +1 -1
  19. package/lib/chat/chatLogic.js +109 -180
  20. package/lib/chat/chatLogic.js.map +1 -1
  21. package/lib/chat/dateFolder.js +6 -91
  22. package/lib/chat/dateFolder.js.map +1 -1
  23. package/lib/chat/infinite.js +33 -185
  24. package/lib/chat/infinite.js.map +1 -1
  25. package/lib/chat/message.js +37 -150
  26. package/lib/chat/message.js.map +1 -1
  27. package/lib/chat/messageTools.js +23 -96
  28. package/lib/chat/messageTools.js.map +1 -1
  29. package/lib/chat/thread.js +33 -91
  30. package/lib/chat/thread.js.map +1 -1
  31. package/lib/create/create.js +19 -51
  32. package/lib/create/create.js.map +1 -1
  33. package/lib/create/index.js +0 -2
  34. package/lib/create/index.js.map +1 -1
  35. package/lib/debug.js +0 -8
  36. package/lib/debug.js.map +1 -1
  37. package/lib/folders.js +4 -27
  38. package/lib/folders.js.map +1 -1
  39. package/lib/footer/index.js +2 -24
  40. package/lib/footer/index.js.map +1 -1
  41. package/lib/footer/styleMap.js.map +1 -1
  42. package/lib/header/empty-profile.js.map +1 -1
  43. package/lib/header/index.js +3 -72
  44. package/lib/header/index.js.map +1 -1
  45. package/lib/header/styleMap.js +4 -3
  46. package/lib/header/styleMap.js.map +1 -1
  47. package/lib/iconBase.js +3 -4
  48. package/lib/iconBase.js.map +1 -1
  49. package/lib/index.js +5 -46
  50. package/lib/index.js.map +1 -1
  51. package/lib/jss/index.js +3 -9
  52. package/lib/jss/index.js.map +1 -1
  53. package/lib/log.js +15 -51
  54. package/lib/log.js.map +1 -1
  55. package/lib/login/login.js +74 -303
  56. package/lib/login/login.js.map +1 -1
  57. package/lib/matrix/index.js +0 -2
  58. package/lib/matrix/index.js.map +1 -1
  59. package/lib/matrix/matrix.js +7 -55
  60. package/lib/matrix/matrix.js.map +1 -1
  61. package/lib/media/index.js +0 -2
  62. package/lib/media/index.js.map +1 -1
  63. package/lib/media/media-capture.js +13 -33
  64. package/lib/media/media-capture.js.map +1 -1
  65. package/lib/messageArea.js +23 -64
  66. package/lib/messageArea.js.map +1 -1
  67. package/lib/noun_Camera_1618446_000000.js.map +1 -1
  68. package/lib/ns.js +5 -7
  69. package/lib/ns.js.map +1 -1
  70. package/lib/pad.js +48 -234
  71. package/lib/pad.js.map +1 -1
  72. package/lib/participation.js +10 -65
  73. package/lib/participation.js.map +1 -1
  74. package/lib/preferences.js +21 -42
  75. package/lib/preferences.js.map +1 -1
  76. package/lib/signup/config-default.js +1 -8
  77. package/lib/signup/config-default.js.map +1 -1
  78. package/lib/signup/signup.js +6 -13
  79. package/lib/signup/signup.js.map +1 -1
  80. package/lib/stories/decorators.js +0 -2
  81. package/lib/stories/decorators.js.map +1 -1
  82. package/lib/style.js +8 -5
  83. package/lib/style.js.map +1 -1
  84. package/lib/style_multiSelect.js +1 -5
  85. package/lib/style_multiSelect.js.map +1 -1
  86. package/lib/table.js +309 -322
  87. package/lib/table.js.map +1 -1
  88. package/lib/tabs.js +20 -100
  89. package/lib/tabs.js.map +1 -1
  90. package/lib/utils/headerFooterHelpers.js +4 -52
  91. package/lib/utils/headerFooterHelpers.js.map +1 -1
  92. package/lib/utils/index.js +41 -135
  93. package/lib/utils/index.js.map +1 -1
  94. package/lib/utils/label.js +13 -34
  95. package/lib/utils/label.js.map +1 -1
  96. package/lib/versionInfo.js +4 -4
  97. package/lib/versionInfo.js.map +1 -1
  98. package/lib/widgets/buttons/iconLinks.js +0 -8
  99. package/lib/widgets/buttons/iconLinks.js.map +1 -1
  100. package/lib/widgets/buttons.js +115 -291
  101. package/lib/widgets/buttons.js.map +1 -1
  102. package/lib/widgets/dragAndDrop.js +12 -41
  103. package/lib/widgets/dragAndDrop.js.map +1 -1
  104. package/lib/widgets/error.js +3 -9
  105. package/lib/widgets/error.js.map +1 -1
  106. package/lib/widgets/forms/autocomplete/autocompleteBar.js +8 -71
  107. package/lib/widgets/forms/autocomplete/autocompleteBar.js.map +1 -1
  108. package/lib/widgets/forms/autocomplete/autocompleteField.js +13 -65
  109. package/lib/widgets/forms/autocomplete/autocompleteField.js.map +1 -1
  110. package/lib/widgets/forms/autocomplete/autocompletePicker.js +15 -107
  111. package/lib/widgets/forms/autocomplete/autocompletePicker.js.map +1 -1
  112. package/lib/widgets/forms/autocomplete/language.js +6 -55
  113. package/lib/widgets/forms/autocomplete/language.js.map +1 -1
  114. package/lib/widgets/forms/autocomplete/publicData.js +12 -131
  115. package/lib/widgets/forms/autocomplete/publicData.js.map +1 -1
  116. package/lib/widgets/forms/basic.js +12 -55
  117. package/lib/widgets/forms/basic.js.map +1 -1
  118. package/lib/widgets/forms/comment.js +1 -15
  119. package/lib/widgets/forms/comment.js.map +1 -1
  120. package/lib/widgets/forms/fieldFunction.js +3 -16
  121. package/lib/widgets/forms/fieldFunction.js.map +1 -1
  122. package/lib/widgets/forms/fieldParams.js +0 -12
  123. package/lib/widgets/forms/fieldParams.js.map +1 -1
  124. package/lib/widgets/forms/formStyle.js +1 -14
  125. package/lib/widgets/forms/formStyle.js.map +1 -1
  126. package/lib/widgets/forms.js +70 -474
  127. package/lib/widgets/forms.js.map +1 -1
  128. package/lib/widgets/index.js +0 -21
  129. package/lib/widgets/index.js.map +1 -1
  130. package/lib/widgets/multiSelect.js +48 -171
  131. package/lib/widgets/multiSelect.js.map +1 -1
  132. package/lib/widgets/peoplePicker.js +20 -90
  133. package/lib/widgets/peoplePicker.js.map +1 -1
  134. package/lib/widgets/widgetHelpers.js +2 -9
  135. package/lib/widgets/widgetHelpers.js.map +1 -1
  136. package/package.json +28 -28
@@ -1 +1 @@
1
- {"version":3,"file":"autocompletePicker.js","names":["AUTOCOMPLETE_THRESHOLD","AUTOCOMPLETE_ROWS","AUTOCOMPLETE_ROWS_STRETCH","setVisible","element","visible","style","display","renderAutoComplete","dom","acOptions","decoration","callback","complain","finish","gotIt","acceptButtonHandler","cancelButtonHandler","nameMatch","clearList","inputEventHHandler","loadBindingsAndFilterByLanguage","filterByName","refreshList","initialize","currentObject","searchInput","value","currentName","foundName","lastFilter","undefined","foundObject","deleteButton","acceptButton","editButton","cancelButton","inputEventHandlerLock","rowForBinding","compareBindingsByName","self","other","name","binding","row","createElement","setStyle","setAttribute","color","allDisplayed","textContent","object","bindingToTerm","subject","nameTerm","addEventListener","_event","debug","log","getPreferredLanguages","languagePrefs","filter","trim","toLowerCase","length","numberOfRows","startsWith","lastBindings","slimmed","loadedEnough","displayable","slice","sort","table","appendChild","bindings","queryPublicDataByName","targetClass","defaultPreferredLanguages","queryParams","AUTOCOMPLETE_LIMIT","filterByLanguage","children","removeChild","lastChild","candidate","parts","split","j","word","indexOf","permanent","div","parentNode","disbaled","termType","objectURIBase","store","sym","message","errorRow","err","Error","widgets","errorMessageBlock","padding","head","cell","size","textInputSize","searchInputStyle","textInputStyle","event","keyCode"],"sources":["../../../../src/widgets/forms/autocomplete/autocompletePicker.ts"],"sourcesContent":["/* Autocomplete Picker: Create and edit data using public data\n**\n** As the data source is passed as a parameter, all kinds of APIa and query services can be used\n**\n*/\nimport * as debug from '../../../debug'\nimport * as style from '../../../style'\nimport * as widgets from '../../../widgets'\nimport { store } from 'solid-logic'\nimport { NamedNode, Literal } from 'rdflib'\nimport { queryPublicDataByName, bindingToTerm, AUTOCOMPLETE_LIMIT, QueryParameters } from './publicData'\nimport { filterByLanguage, getPreferredLanguages, defaultPreferredLanguages } from './language'\n\nconst AUTOCOMPLETE_THRESHOLD = 4 // don't check until this many characters typed\nconst AUTOCOMPLETE_ROWS = 20 // 20?\nconst AUTOCOMPLETE_ROWS_STRETCH = 40\n\n/*\nAutocomplete happens in 6 phases:\n 1. The search string is too small to bother\n 2. The search string is big enough, and we have not loaded the array\n 3. The search string is big enough, and we have loaded array up to the limit\n Display them and wait for more user input\n 4. The search string is big enough, and we have loaded array NOT to the limit\n but including all matches. No more fetches.\n If user gets more precise, wait for them to select one - or reduce to a single\n 5. Single one selected. Optionally waiting for accept button to be pressed, OR can change string and go to 5 or 2\n 6. Locked with a value. Press 'edit' button to return to 5\n*/\n\nexport type AutocompleteDecoration = {\n acceptButton?: HTMLElement,\n cancelButton: HTMLElement, // Must have cancel button\n editButton?: HTMLElement,\n deleteButton?: HTMLElement\n}\nexport type AutocompleteOptions = {\n targetClass?: NamedNode,\n currentObject?: NamedNode,\n currentName?: Literal,\n queryParams: QueryParameters,\n size?: number,\n permanent?: boolean\n}\n\ninterface Callback1 {\n (_subject: NamedNode, _name: Literal): any;\n}\n\nexport function setVisible (element:HTMLElement, visible:boolean) {\n element.style.display = visible ? '' : 'none' // Do not use visibility, it holds the real estate\n}\n\n// The core of the autocomplete UI\nexport async function renderAutoComplete (dom: HTMLDocument,\n acOptions:AutocompleteOptions,\n decoration: AutocompleteDecoration,\n callback: Callback1) {\n function complain (message) {\n const errorRow = table.appendChild(dom.createElement('tr'))\n debug.log(message)\n const err = new Error(message)\n errorRow.appendChild(widgets.errorMessageBlock(dom, err, 'pink'))\n // errorMessageBlock will log the stack to the console\n style.setStyle(errorRow, 'autocompleteRowStyle')\n errorRow.style.padding = '1em'\n }\n\n function finish (object, name) {\n debug.log('Auto complete: finish! ' + object)\n if (object.termType === 'Literal' && acOptions.queryParams.objectURIBase) {\n object = store.sym(acOptions.queryParams.objectURIBase.value + object.value)\n }\n // remove(decoration.cancelButton)\n // remove(decoration.acceptButton)\n // remove(div)\n clearList()\n callback(object, name)\n }\n async function gotIt (object:NamedNode | Literal, name: Literal) {\n if (decoration.acceptButton) {\n (decoration.acceptButton as any).disbaled = false\n setVisible(decoration.acceptButton, true) // now wait for confirmation\n searchInput.value = name.value // complete it\n foundName = name\n foundObject = object\n debug.log('Auto complete: name: ' + name)\n debug.log('Auto complete: waiting for accept ' + object)\n clearList() // This may be an option - nice and clean but does not allow change of mind\n return\n }\n setVisible(decoration.cancelButton, true)\n finish(object, name)\n }\n\n async function acceptButtonHandler (_event) {\n if (foundName && searchInput.value === foundName.value) { // still\n finish(foundObject, foundName)\n }\n }\n\n async function cancelButtonHandler (_event) {\n debug.log('Auto complete: Canceled by user! ')\n if (acOptions.permanent) {\n initialize()\n } else {\n if (div.parentNode) {\n div.parentNode.removeChild(div)\n }\n }\n }\n\n function nameMatch (filter:string, candidate: string):boolean {\n const parts = filter.split(' ') // Each name part must be somewhere\n for (let j = 0; j < parts.length; j++) {\n const word = parts[j]\n if (candidate.toLowerCase().indexOf(word) < 0) return false\n }\n return true\n }\n\n function clearList () {\n while (table.children.length > 1) {\n table.removeChild(table.lastChild as Node)\n }\n }\n\n async function inputEventHHandler (_event) {\n // console.log('@@ AC inputEventHHandler called')\n setVisible(decoration.cancelButton, true) // only allow cancel when there is something to cancel\n refreshList() /// @@ debounqce does not work with jest\n /*\n if (runningTimeout) {\n clearTimeout(runningTimeout)\n }\n runningTimeout = setTimeout(refreshList, AUTOCOMPLETE_DEBOUNCE_MS)\n */\n }\n\n async function loadBindingsAndFilterByLanguage (filter, languagePrefs) {\n // console.log('@@ loadBindingsAndFilterByLanguage ' + filter)\n let bindings\n try {\n bindings = await queryPublicDataByName(filter, targetClass as any,\n languagePrefs || defaultPreferredLanguages, acOptions.queryParams)\n } catch (err) {\n complain('Error querying db of organizations: ' + err)\n inputEventHandlerLock = false\n return\n }\n loadedEnough = bindings.length < AUTOCOMPLETE_LIMIT\n if (loadedEnough) {\n lastFilter = filter\n } else {\n lastFilter = undefined\n }\n clearList()\n const slimmed = filterByLanguage(bindings, languagePrefs)\n return slimmed\n }\n\n function filterByName (filter, bindings) {\n return bindings.filter(binding => nameMatch(filter, binding.name.value))\n }\n\n async function refreshList () {\n // console.log('@@ refreshList called')\n function rowForBinding (binding) {\n const row = dom.createElement('tr')\n style.setStyle(row, 'autocompleteRowStyle')\n row.setAttribute('style', 'padding: 0.3em;')\n row.style.color = allDisplayed ? '#080' : '#088' // green means 'you should find it here'\n row.textContent = binding.name.value\n const object = bindingToTerm(binding.subject)\n const nameTerm = bindingToTerm(binding.name)\n row.addEventListener('click', async _event => {\n debug.log(' click row textContent: ' + row.textContent)\n debug.log(' click name: ' + nameTerm.value)\n if (object && nameTerm) {\n gotIt(object, nameTerm as Literal)\n }\n })\n return row\n } // rowForBinding\n function compareBindingsByName (self, other) {\n return other.name.value > self.name.value\n ? 1\n : other.name.name < self.name.value ? -1 : 0\n }\n\n if (inputEventHandlerLock) {\n debug.log(`Ignoring \"${searchInput.value}\" because of lock `)\n return\n }\n debug.log(`Setting lock at \"${searchInput.value}\"`)\n\n inputEventHandlerLock = true\n const languagePrefs = await getPreferredLanguages()\n const filter = searchInput.value.trim().toLowerCase()\n if (filter.length < AUTOCOMPLETE_THRESHOLD) { // too small\n clearList()\n // candidatesLoaded = false\n numberOfRows = AUTOCOMPLETE_ROWS\n } else {\n if (!allDisplayed || !lastFilter || !filter.startsWith(lastFilter)) {\n debug.log(` Querying database at \"${filter}\" cf last \"${lastFilter}\".`)\n lastBindings = await loadBindingsAndFilterByLanguage(filter, languagePrefs) // freesh query\n }\n // Trim table as search gets tighter:\n const slimmed = filterByName(filter, lastBindings)\n if (loadedEnough && slimmed.length <= AUTOCOMPLETE_ROWS_STRETCH) {\n numberOfRows = slimmed.length // stretch if it means we get all items\n }\n allDisplayed = loadedEnough && slimmed.length <= numberOfRows\n debug.log(` Filter:\"${filter}\" lastBindings: ${lastBindings.length}, slimmed to ${slimmed.length}; rows: ${numberOfRows}, Enough? ${loadedEnough}, All displayed? ${allDisplayed}`)\n\n const displayable = slimmed.slice(0, numberOfRows)\n\n displayable.sort(compareBindingsByName)\n clearList()\n for (const binding of displayable) {\n table.appendChild(rowForBinding(binding))\n }\n if (slimmed.length === 1) {\n gotIt(bindingToTerm(slimmed[0].subject), bindingToTerm(slimmed[0].name) as Literal)\n }\n } // else\n inputEventHandlerLock = false\n } // refreshList\n\n function initialize () {\n if (acOptions.currentObject) { // If have existing value then jump into the endgame of the autocomplete\n searchInput.value = acOptions.currentName ? acOptions.currentName.value : '??? wot no name for ' + acOptions.currentObject\n foundName = acOptions.currentName\n lastFilter = acOptions.currentName ? acOptions.currentName.value : undefined\n foundObject = acOptions.currentObject\n } else {\n searchInput.value = ''\n lastFilter = undefined\n foundObject = undefined\n }\n if (decoration.deleteButton) {\n setVisible(decoration.deleteButton, !!acOptions.currentObject)\n }\n\n if (decoration.acceptButton) {\n setVisible(decoration.acceptButton, false) // hide until input complete\n }\n if (decoration.editButton) {\n setVisible(decoration.editButton, true)\n }\n if (decoration.cancelButton) {\n setVisible(decoration.cancelButton, false) // only allow cancel when there is something to cancel\n }\n inputEventHandlerLock = false\n clearList()\n } // initialiize\n\n // const queryParams: QueryParameters = acOptions.queryParams\n const targetClass = acOptions.targetClass\n if (!targetClass) throw new Error('renderAutoComplete: missing targetClass')\n // console.log(`renderAutoComplete: targetClass=${targetClass}` )\n if (decoration.acceptButton) {\n decoration.acceptButton.addEventListener('click', acceptButtonHandler, false)\n }\n if (decoration.cancelButton) {\n decoration.cancelButton.addEventListener('click', cancelButtonHandler, false)\n }\n\n // var candidatesLoaded = false\n let lastBindings\n let loadedEnough = false\n let inputEventHandlerLock = false\n let allDisplayed = false\n let lastFilter = undefined as (string | undefined)\n let numberOfRows = AUTOCOMPLETE_ROWS // this gets slimmed down\n const div = dom.createElement('div')\n let foundName = undefined as (Literal | undefined)// once found accepted string must match this\n let foundObject = undefined as (NamedNode | Literal | undefined)\n const table = div.appendChild(dom.createElement('table'))\n table.setAttribute('data-testid', 'autocomplete-table')\n table.setAttribute('style', 'max-width: 30em; margin: 0.5em;')\n const head = table.appendChild(dom.createElement('tr'))\n style.setStyle(head, 'autocompleteRowStyle') // textInputStyle or\n const cell = head.appendChild(dom.createElement('td'))\n const searchInput = cell.appendChild(dom.createElement('input'))\n searchInput.setAttribute('type', 'text')\n\n initialize()\n\n const size = acOptions.size || style.textInputSize || 20\n searchInput.setAttribute('size', size)\n searchInput.setAttribute('data-testid', 'autocomplete-input')\n\n const searchInputStyle = style.textInputStyle || // searchInputStyle ?\n 'border: 0.1em solid #444; border-radius: 0.5em; width: 100%; font-size: 100%; padding: 0.1em 0.6em' // @\n searchInput.setAttribute('style', searchInputStyle)\n searchInput.addEventListener('keyup', function (event) {\n if (event.keyCode === 13) {\n acceptButtonHandler(event)\n }\n }, false)\n\n searchInput.addEventListener('input', inputEventHHandler)\n // console.log('@@ renderAutoComplete returns ' + div.innerHTML)\n return div\n} // renderAutoComplete\n\n// ENDS\n"],"mappings":"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"}
1
+ {"version":3,"file":"autocompletePicker.js","names":["AUTOCOMPLETE_THRESHOLD","AUTOCOMPLETE_ROWS","AUTOCOMPLETE_ROWS_STRETCH","setVisible","element","visible","style","display","renderAutoComplete","dom","acOptions","decoration","callback","complain","finish","gotIt","acceptButtonHandler","cancelButtonHandler","nameMatch","clearList","inputEventHHandler","loadBindingsAndFilterByLanguage","filterByName","refreshList","initialize","currentObject","searchInput","value","currentName","foundName","lastFilter","undefined","foundObject","deleteButton","acceptButton","editButton","cancelButton","inputEventHandlerLock","rowForBinding","compareBindingsByName","self","other","name","binding","row","createElement","setStyle","setAttribute","color","allDisplayed","textContent","object","bindingToTerm","subject","nameTerm","addEventListener","_event","debug","log","getPreferredLanguages","languagePrefs","filter","trim","toLowerCase","length","numberOfRows","startsWith","lastBindings","slimmed","loadedEnough","displayable","slice","sort","table","appendChild","bindings","queryPublicDataByName","targetClass","defaultPreferredLanguages","queryParams","AUTOCOMPLETE_LIMIT","filterByLanguage","children","removeChild","lastChild","candidate","parts","split","j","word","indexOf","permanent","div","parentNode","disbaled","termType","objectURIBase","store","sym","message","errorRow","err","Error","widgets","errorMessageBlock","padding","head","cell","size","textInputSize","searchInputStyle","textInputStyle","event","keyCode"],"sources":["../../../../src/widgets/forms/autocomplete/autocompletePicker.ts"],"sourcesContent":["/* Autocomplete Picker: Create and edit data using public data\n**\n** As the data source is passed as a parameter, all kinds of APIa and query services can be used\n**\n*/\nimport * as debug from '../../../debug'\nimport * as style from '../../../style'\nimport * as widgets from '../../../widgets'\nimport { store } from 'solid-logic'\nimport { NamedNode, Literal } from 'rdflib'\nimport { queryPublicDataByName, bindingToTerm, AUTOCOMPLETE_LIMIT, QueryParameters } from './publicData'\nimport { filterByLanguage, getPreferredLanguages, defaultPreferredLanguages } from './language'\n\nconst AUTOCOMPLETE_THRESHOLD = 4 // don't check until this many characters typed\nconst AUTOCOMPLETE_ROWS = 20 // 20?\nconst AUTOCOMPLETE_ROWS_STRETCH = 40\n\n/*\nAutocomplete happens in 6 phases:\n 1. The search string is too small to bother\n 2. The search string is big enough, and we have not loaded the array\n 3. The search string is big enough, and we have loaded array up to the limit\n Display them and wait for more user input\n 4. The search string is big enough, and we have loaded array NOT to the limit\n but including all matches. No more fetches.\n If user gets more precise, wait for them to select one - or reduce to a single\n 5. Single one selected. Optionally waiting for accept button to be pressed, OR can change string and go to 5 or 2\n 6. Locked with a value. Press 'edit' button to return to 5\n*/\n\nexport type AutocompleteDecoration = {\n acceptButton?: HTMLElement,\n cancelButton: HTMLElement, // Must have cancel button\n editButton?: HTMLElement,\n deleteButton?: HTMLElement\n}\nexport type AutocompleteOptions = {\n targetClass?: NamedNode,\n currentObject?: NamedNode,\n currentName?: Literal,\n queryParams: QueryParameters,\n size?: number,\n permanent?: boolean\n}\n\ninterface Callback1 {\n (_subject: NamedNode, _name: Literal): any;\n}\n\nexport function setVisible (element:HTMLElement, visible:boolean) {\n element.style.display = visible ? '' : 'none' // Do not use visibility, it holds the real estate\n}\n\n// The core of the autocomplete UI\nexport async function renderAutoComplete (dom: HTMLDocument,\n acOptions:AutocompleteOptions,\n decoration: AutocompleteDecoration,\n callback: Callback1) {\n function complain (message) {\n const errorRow = table.appendChild(dom.createElement('tr'))\n debug.log(message)\n const err = new Error(message)\n errorRow.appendChild(widgets.errorMessageBlock(dom, err, 'pink'))\n // errorMessageBlock will log the stack to the console\n style.setStyle(errorRow, 'autocompleteRowStyle')\n errorRow.style.padding = '1em'\n }\n\n function finish (object, name) {\n debug.log('Auto complete: finish! ' + object)\n if (object.termType === 'Literal' && acOptions.queryParams.objectURIBase) {\n object = store.sym(acOptions.queryParams.objectURIBase.value + object.value)\n }\n // remove(decoration.cancelButton)\n // remove(decoration.acceptButton)\n // remove(div)\n clearList()\n callback(object, name)\n }\n async function gotIt (object:NamedNode | Literal, name: Literal) {\n if (decoration.acceptButton) {\n (decoration.acceptButton as any).disbaled = false\n setVisible(decoration.acceptButton, true) // now wait for confirmation\n searchInput.value = name.value // complete it\n foundName = name\n foundObject = object\n debug.log('Auto complete: name: ' + name)\n debug.log('Auto complete: waiting for accept ' + object)\n clearList() // This may be an option - nice and clean but does not allow change of mind\n return\n }\n setVisible(decoration.cancelButton, true)\n finish(object, name)\n }\n\n async function acceptButtonHandler (_event) {\n if (foundName && searchInput.value === foundName.value) { // still\n finish(foundObject, foundName)\n }\n }\n\n async function cancelButtonHandler (_event) {\n debug.log('Auto complete: Canceled by user! ')\n if (acOptions.permanent) {\n initialize()\n } else {\n if (div.parentNode) {\n div.parentNode.removeChild(div)\n }\n }\n }\n\n function nameMatch (filter:string, candidate: string):boolean {\n const parts = filter.split(' ') // Each name part must be somewhere\n for (let j = 0; j < parts.length; j++) {\n const word = parts[j]\n if (candidate.toLowerCase().indexOf(word) < 0) return false\n }\n return true\n }\n\n function clearList () {\n while (table.children.length > 1) {\n table.removeChild(table.lastChild as Node)\n }\n }\n\n async function inputEventHHandler (_event) {\n // console.log('@@ AC inputEventHHandler called')\n setVisible(decoration.cancelButton, true) // only allow cancel when there is something to cancel\n refreshList() /// @@ debounqce does not work with jest\n /*\n if (runningTimeout) {\n clearTimeout(runningTimeout)\n }\n runningTimeout = setTimeout(refreshList, AUTOCOMPLETE_DEBOUNCE_MS)\n */\n }\n\n async function loadBindingsAndFilterByLanguage (filter, languagePrefs) {\n // console.log('@@ loadBindingsAndFilterByLanguage ' + filter)\n let bindings\n try {\n bindings = await queryPublicDataByName(filter, targetClass as any,\n languagePrefs || defaultPreferredLanguages, acOptions.queryParams)\n } catch (err) {\n complain('Error querying db of organizations: ' + err)\n inputEventHandlerLock = false\n return\n }\n loadedEnough = bindings.length < AUTOCOMPLETE_LIMIT\n if (loadedEnough) {\n lastFilter = filter\n } else {\n lastFilter = undefined\n }\n clearList()\n const slimmed = filterByLanguage(bindings, languagePrefs)\n return slimmed\n }\n\n function filterByName (filter, bindings) {\n return bindings.filter(binding => nameMatch(filter, binding.name.value))\n }\n\n async function refreshList () {\n // console.log('@@ refreshList called')\n function rowForBinding (binding) {\n const row = dom.createElement('tr')\n style.setStyle(row, 'autocompleteRowStyle')\n row.setAttribute('style', 'padding: 0.3em;')\n row.style.color = allDisplayed ? '#080' : '#088' // green means 'you should find it here'\n row.textContent = binding.name.value\n const object = bindingToTerm(binding.subject)\n const nameTerm = bindingToTerm(binding.name)\n row.addEventListener('click', async _event => {\n debug.log(' click row textContent: ' + row.textContent)\n debug.log(' click name: ' + nameTerm.value)\n if (object && nameTerm) {\n gotIt(object, nameTerm as Literal)\n }\n })\n return row\n } // rowForBinding\n function compareBindingsByName (self, other) {\n return other.name.value > self.name.value\n ? 1\n : other.name.name < self.name.value ? -1 : 0\n }\n\n if (inputEventHandlerLock) {\n debug.log(`Ignoring \"${searchInput.value}\" because of lock `)\n return\n }\n debug.log(`Setting lock at \"${searchInput.value}\"`)\n\n inputEventHandlerLock = true\n const languagePrefs = await getPreferredLanguages()\n const filter = searchInput.value.trim().toLowerCase()\n if (filter.length < AUTOCOMPLETE_THRESHOLD) { // too small\n clearList()\n // candidatesLoaded = false\n numberOfRows = AUTOCOMPLETE_ROWS\n } else {\n if (!allDisplayed || !lastFilter || !filter.startsWith(lastFilter)) {\n debug.log(` Querying database at \"${filter}\" cf last \"${lastFilter}\".`)\n lastBindings = await loadBindingsAndFilterByLanguage(filter, languagePrefs) // freesh query\n }\n // Trim table as search gets tighter:\n const slimmed = filterByName(filter, lastBindings)\n if (loadedEnough && slimmed.length <= AUTOCOMPLETE_ROWS_STRETCH) {\n numberOfRows = slimmed.length // stretch if it means we get all items\n }\n allDisplayed = loadedEnough && slimmed.length <= numberOfRows\n debug.log(` Filter:\"${filter}\" lastBindings: ${lastBindings.length}, slimmed to ${slimmed.length}; rows: ${numberOfRows}, Enough? ${loadedEnough}, All displayed? ${allDisplayed}`)\n\n const displayable = slimmed.slice(0, numberOfRows)\n\n displayable.sort(compareBindingsByName)\n clearList()\n for (const binding of displayable) {\n table.appendChild(rowForBinding(binding))\n }\n if (slimmed.length === 1) {\n gotIt(bindingToTerm(slimmed[0].subject), bindingToTerm(slimmed[0].name) as Literal)\n }\n } // else\n inputEventHandlerLock = false\n } // refreshList\n\n function initialize () {\n if (acOptions.currentObject) { // If have existing value then jump into the endgame of the autocomplete\n searchInput.value = acOptions.currentName ? acOptions.currentName.value : '??? wot no name for ' + acOptions.currentObject\n foundName = acOptions.currentName\n lastFilter = acOptions.currentName ? acOptions.currentName.value : undefined\n foundObject = acOptions.currentObject\n } else {\n searchInput.value = ''\n lastFilter = undefined\n foundObject = undefined\n }\n if (decoration.deleteButton) {\n setVisible(decoration.deleteButton, !!acOptions.currentObject)\n }\n\n if (decoration.acceptButton) {\n setVisible(decoration.acceptButton, false) // hide until input complete\n }\n if (decoration.editButton) {\n setVisible(decoration.editButton, true)\n }\n if (decoration.cancelButton) {\n setVisible(decoration.cancelButton, false) // only allow cancel when there is something to cancel\n }\n inputEventHandlerLock = false\n clearList()\n } // initialiize\n\n // const queryParams: QueryParameters = acOptions.queryParams\n const targetClass = acOptions.targetClass\n if (!targetClass) throw new Error('renderAutoComplete: missing targetClass')\n // console.log(`renderAutoComplete: targetClass=${targetClass}` )\n if (decoration.acceptButton) {\n decoration.acceptButton.addEventListener('click', acceptButtonHandler, false)\n }\n if (decoration.cancelButton) {\n decoration.cancelButton.addEventListener('click', cancelButtonHandler, false)\n }\n\n // var candidatesLoaded = false\n let lastBindings\n let loadedEnough = false\n let inputEventHandlerLock = false\n let allDisplayed = false\n let lastFilter = undefined as (string | undefined)\n let numberOfRows = AUTOCOMPLETE_ROWS // this gets slimmed down\n const div = dom.createElement('div')\n let foundName = undefined as (Literal | undefined)// once found accepted string must match this\n let foundObject = undefined as (NamedNode | Literal | undefined)\n const table = div.appendChild(dom.createElement('table'))\n table.setAttribute('data-testid', 'autocomplete-table')\n table.setAttribute('style', 'max-width: 30em; margin: 0.5em;')\n const head = table.appendChild(dom.createElement('tr'))\n style.setStyle(head, 'autocompleteRowStyle') // textInputStyle or\n const cell = head.appendChild(dom.createElement('td'))\n const searchInput = cell.appendChild(dom.createElement('input'))\n searchInput.setAttribute('type', 'text')\n\n initialize()\n\n const size = acOptions.size || style.textInputSize || 20\n searchInput.setAttribute('size', size)\n searchInput.setAttribute('data-testid', 'autocomplete-input')\n\n const searchInputStyle = style.textInputStyle || // searchInputStyle ?\n 'border: 0.1em solid #444; border-radius: 0.5em; width: 100%; font-size: 100%; padding: 0.1em 0.6em' // @\n searchInput.setAttribute('style', searchInputStyle)\n searchInput.addEventListener('keyup', function (event) {\n if (event.keyCode === 13) {\n acceptButtonHandler(event)\n }\n }, false)\n\n searchInput.addEventListener('input', inputEventHHandler)\n // console.log('@@ renderAutoComplete returns ' + div.innerHTML)\n return div\n} // renderAutoComplete\n\n// ENDS\n"],"mappings":"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"}
@@ -1,9 +1,7 @@
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
  });
@@ -13,43 +11,33 @@ exports.filterByLanguage = filterByLanguage;
13
11
  exports.getPreferredLanguages = getPreferredLanguages;
14
12
  exports.getPreferredLanguagesFor = getPreferredLanguagesFor;
15
13
  exports.languageCodeURIBase = void 0;
16
-
17
14
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
18
-
19
15
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
20
-
21
16
  var debug = _interopRequireWildcard(require("../../../debug"));
22
-
23
17
  var _solidLogic = require("solid-logic");
24
-
25
18
  var ns = _interopRequireWildcard(require("../../../ns"));
26
-
27
19
  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); }
28
-
29
20
  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; }
30
-
31
21
  /* Logic to access public data stores
32
22
  *
33
23
  * including filtering resut by natural language etc
34
24
  * See https://solidos.solidcommunity.net/public/2021/01%20Building%20Solid%20Apps%20which%20use%20Public%20Data.html
35
25
  */
36
-
37
26
  /* eslint-disable no-console */
27
+
38
28
  // import * as logic from '../index'
39
29
  // import { authn } from '../../../authn/index'
40
- var languageCodeURIBase = 'https://www.w3.org/ns/iana/language-code/'; /// @@ unsupported on the web (2021)
41
30
 
31
+ var languageCodeURIBase = 'https://www.w3.org/ns/iana/language-code/'; /// @@ unsupported on the web (2021)
42
32
  exports.languageCodeURIBase = languageCodeURIBase;
43
33
  var defaultPreferredLanguages = ['en', 'fr', 'de', 'it', 'ar'];
44
34
  exports.defaultPreferredLanguages = defaultPreferredLanguages;
45
-
46
35
  function addDefaults(array) {
47
36
  if (!array) array = [];
48
37
  return array.concat(defaultPreferredLanguages.filter(function (code) {
49
38
  return !array.includes(code);
50
39
  }));
51
40
  }
52
-
53
41
  function getPreferredLanguagesFor(_x) {
54
42
  return _getPreferredLanguagesFor.apply(this, arguments);
55
43
  }
@@ -57,12 +45,9 @@ function getPreferredLanguagesFor(_x) {
57
45
  *
58
46
  * Either from solid preferences or browser preferences or default
59
47
  */
60
-
61
-
62
48
  function _getPreferredLanguagesFor() {
63
49
  _getPreferredLanguagesFor = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(person) {
64
50
  var _store$fetcher;
65
-
66
51
  var doc, list, languageCodeArray;
67
52
  return _regenerator["default"].wrap(function _callee$(_context) {
68
53
  while (1) {
@@ -71,48 +56,37 @@ function _getPreferredLanguagesFor() {
71
56
  doc = person.doc();
72
57
  _context.next = 3;
73
58
  return (_store$fetcher = _solidLogic.store.fetcher) === null || _store$fetcher === void 0 ? void 0 : _store$fetcher.load(doc);
74
-
75
59
  case 3:
76
60
  list = _solidLogic.store.any(person, ns.schema('knowsLanguage'), null, doc);
77
-
78
61
  if (list) {
79
62
  _context.next = 6;
80
63
  break;
81
64
  }
82
-
83
65
  return _context.abrupt("return", defaultPreferredLanguages);
84
-
85
66
  case 6:
86
67
  languageCodeArray = [];
87
68
  list.elements.forEach(function (item) {
88
69
  // console.log('@@ item ' + item)
89
70
  var lang = _solidLogic.store.any(item, ns.solid('publicId'), null, doc);
90
-
91
71
  if (!lang) {
92
72
  console.warn('getPreferredLanguages: No publiID of language.');
93
73
  return;
94
74
  }
95
-
96
75
  if (!lang.value.startsWith(languageCodeURIBase)) {
97
76
  console.error("What should be a language code ".concat(lang.value, " does not start with ").concat(languageCodeURIBase));
98
77
  return;
99
78
  }
100
-
101
79
  var code = lang.value.slice(languageCodeURIBase.length);
102
80
  languageCodeArray.push(code);
103
81
  });
104
-
105
82
  if (!(languageCodeArray.length > 0)) {
106
83
  _context.next = 11;
107
84
  break;
108
85
  }
109
-
110
86
  console.log(" User knows languages with codes: \"".concat(languageCodeArray.join(','), "\""));
111
87
  return _context.abrupt("return", addDefaults(languageCodeArray));
112
-
113
88
  case 11:
114
89
  return _context.abrupt("return", null);
115
-
116
90
  case 12:
117
91
  case "end":
118
92
  return _context.stop();
@@ -122,7 +96,6 @@ function _getPreferredLanguagesFor() {
122
96
  }));
123
97
  return _getPreferredLanguagesFor.apply(this, arguments);
124
98
  }
125
-
126
99
  function getPreferredLanguages() {
127
100
  return _getPreferredLanguages.apply(this, arguments);
128
101
  }
@@ -130,8 +103,6 @@ function getPreferredLanguages() {
130
103
  * remove dupliacte names for the same thing, leaving the user's
131
104
  * preferred language version
132
105
  */
133
-
134
-
135
106
  function _getPreferredLanguages() {
136
107
  _getPreferredLanguages = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2() {
137
108
  var me, solidLanguagePrefs;
@@ -141,54 +112,41 @@ function _getPreferredLanguages() {
141
112
  case 0:
142
113
  _context2.next = 2;
143
114
  return _solidLogic.authn.currentUser();
144
-
145
115
  case 2:
146
116
  me = _context2.sent;
147
-
148
117
  if (!me) {
149
118
  _context2.next = 9;
150
119
  break;
151
120
  }
152
-
153
121
  _context2.next = 6;
154
122
  return getPreferredLanguagesFor(me);
155
-
156
123
  case 6:
157
124
  solidLanguagePrefs = _context2.sent;
158
-
159
125
  if (!solidLanguagePrefs) {
160
126
  _context2.next = 9;
161
127
  break;
162
128
  }
163
-
164
129
  return _context2.abrupt("return", solidLanguagePrefs);
165
-
166
130
  case 9:
167
131
  if (!(typeof navigator !== 'undefined')) {
168
132
  _context2.next = 14;
169
133
  break;
170
134
  }
171
-
172
135
  if (!navigator.languages) {
173
136
  _context2.next = 12;
174
137
  break;
175
138
  }
176
-
177
139
  return _context2.abrupt("return", addDefaults(navigator.languages.map(function (longForm) {
178
140
  return longForm.split('-')[0];
179
141
  })));
180
-
181
142
  case 12:
182
143
  if (!navigator.language) {
183
144
  _context2.next = 14;
184
145
  break;
185
146
  }
186
-
187
147
  return _context2.abrupt("return", addDefaults([navigator.language.split('-')[0]]));
188
-
189
148
  case 14:
190
149
  return _context2.abrupt("return", defaultPreferredLanguages);
191
-
192
150
  case 15:
193
151
  case "end":
194
152
  return _context2.stop();
@@ -198,7 +156,6 @@ function _getPreferredLanguages() {
198
156
  }));
199
157
  return _getPreferredLanguages.apply(this, arguments);
200
158
  }
201
-
202
159
  function filterByLanguage(bindings, languagePrefs) {
203
160
  var uris = {};
204
161
  bindings.forEach(function (binding) {
@@ -210,29 +167,23 @@ function filterByLanguage(bindings, languagePrefs) {
210
167
  var languagePrefs2 = languagePrefs || defaultPreferredLanguages;
211
168
  languagePrefs2.reverse(); // Preferred last
212
169
 
213
- var slimmed = []; // console.log(` @@ {languagePrefs2 ${languagePrefs2}`)
214
-
170
+ var slimmed = [];
171
+ // console.log(` @@ {languagePrefs2 ${languagePrefs2}`)
215
172
  for (var u in uris) {
216
173
  // needs hasOwnProperty ?
217
174
  var _bindings = uris[u];
218
-
219
175
  var sortMe = _bindings.map(function (binding) {
220
176
  var lang = binding.name['xml:lang'];
221
177
  var index = languagePrefs2.indexOf(lang);
222
- var pair = [index, binding]; // console.log(` @@ lang: ${lang}, index: ${index}`)
223
-
178
+ var pair = [index, binding];
179
+ // console.log(` @@ lang: ${lang}, index: ${index}`)
224
180
  return pair;
225
181
  });
226
-
227
182
  sortMe.sort(); // best at th ebottom
228
-
229
183
  sortMe.reverse(); // best at the top
230
184
  // console.debug('@@ sortMe:', sortMe)
231
-
232
185
  slimmed.push(sortMe[0][1]);
233
186
  } // map u
234
-
235
-
236
187
  debug.log(" Filter by language: ".concat(bindings.length, " -> ").concat(slimmed.length));
237
188
  return slimmed;
238
189
  }
@@ -1 +1 @@
1
- {"version":3,"file":"language.js","names":["languageCodeURIBase","defaultPreferredLanguages","addDefaults","array","concat","filter","code","includes","getPreferredLanguagesFor","person","doc","store","fetcher","load","list","any","ns","schema","languageCodeArray","elements","forEach","item","lang","solid","console","warn","value","startsWith","error","slice","length","push","log","join","getPreferredLanguages","authn","currentUser","me","solidLanguagePrefs","navigator","languages","map","longForm","split","language","filterByLanguage","bindings","languagePrefs","uris","binding","uri","subject","languagePrefs2","reverse","slimmed","u","sortMe","name","index","indexOf","pair","sort","debug"],"sources":["../../../../src/widgets/forms/autocomplete/language.ts"],"sourcesContent":["/* Logic to access public data stores\n*\n* including filtering resut by natural language etc\n* See https://solidos.solidcommunity.net/public/2021/01%20Building%20Solid%20Apps%20which%20use%20Public%20Data.html\n*/\n/* eslint-disable no-console */\nimport * as debug from '../../../debug'\n// import * as logic from '../index'\n// import { authn } from '../../../authn/index'\nimport { authn, store } from 'solid-logic'\nimport * as ns from '../../../ns'\nimport { Collection, NamedNode, Node } from 'rdflib'\n// import { Binding } from '../widgets/forms/autocomplete/publicData'\n// import { nativeNameForLanguageCode, englishNameForLanguageCode } from './nativeNameForLanguageCode'\n\n// const { currentUser } = logic.authn\n\nexport interface Binding {\n subject: Node;\n name?: Node\n location?: Node\n coordinates?: Node\n}\n\nexport const languageCodeURIBase = 'https://www.w3.org/ns/iana/language-code/' /// @@ unsupported on the web (2021)\n\nexport const defaultPreferredLanguages = ['en', 'fr', 'de', 'it', 'ar']\n\nexport function addDefaults (array) {\n if (!array) array = []\n return array.concat(defaultPreferredLanguages.filter(code => !array.includes(code)))\n}\n\nexport async function getPreferredLanguagesFor (person: NamedNode) {\n const doc = person.doc()\n await store.fetcher?.load(doc)\n const list = store.any(person, ns.schema('knowsLanguage'), null, doc) as Collection | undefined\n if (!list) {\n // console.log(`User ${person} has not set their languages in their profile.`)\n return defaultPreferredLanguages\n }\n const languageCodeArray: string[] = []\n list.elements.forEach(item => {\n // console.log('@@ item ' + item)\n const lang = store.any(item as any, ns.solid('publicId'), null, doc)\n if (!lang) {\n console.warn('getPreferredLanguages: No publiID of language.')\n return\n }\n if (!lang.value.startsWith(languageCodeURIBase)) {\n console.error(`What should be a language code ${lang.value} does not start with ${languageCodeURIBase}`)\n return\n }\n const code = lang.value.slice(languageCodeURIBase.length)\n languageCodeArray.push(code)\n })\n\n if (languageCodeArray.length > 0) {\n console.log(` User knows languages with codes: \"${languageCodeArray.join(',')}\"`)\n return addDefaults(languageCodeArray)\n }\n return null\n}\n/* Get the preferred langauges for the user\n *\n * Either from solid preferences or browser preferences or default\n */\nexport async function getPreferredLanguages () {\n // In future: cache in the login session for speed, but get from profile and private prefs\n // We append the defaults so if someone's first choice is not available they don't get something very obscure\n // See https://github.com/solidos/solidos/issues/42\n const me = await authn.currentUser() as NamedNode\n if (me) { // If logged in\n const solidLanguagePrefs = await getPreferredLanguagesFor(me)\n if (solidLanguagePrefs) return solidLanguagePrefs\n }\n if (typeof navigator !== 'undefined') { // use browser settings\n if (navigator.languages) {\n return addDefaults(navigator.languages.map(longForm => longForm.split('-')[0]))\n }\n if (navigator.language) {\n return addDefaults([navigator.language.split('-')[0]])\n }\n }\n return defaultPreferredLanguages\n}\n\n/* From an array of bindings with a names for each row,\n * remove dupliacte names for the same thing, leaving the user's\n * preferred language version\n*/\n\nexport function filterByLanguage (bindings, languagePrefs) {\n const uris = {}\n bindings.forEach(binding => { // Organize names by their subject\n const uri = binding.subject.value\n uris[uri] = uris[uri] || []\n uris[uri].push(binding)\n })\n\n const languagePrefs2 = languagePrefs || defaultPreferredLanguages\n languagePrefs2.reverse() // Preferred last\n\n const slimmed = ([] as Array<Binding>)\n // console.log(` @@ {languagePrefs2 ${languagePrefs2}`)\n for (const u in uris) { // needs hasOwnProperty ?\n const bindings = uris[u]\n const sortMe = bindings.map(binding => {\n const lang = binding.name['xml:lang']\n const index = languagePrefs2.indexOf(lang)\n const pair = [index, binding]\n // console.log(` @@ lang: ${lang}, index: ${index}`)\n return pair\n })\n sortMe.sort() // best at th ebottom\n sortMe.reverse() // best at the top\n // console.debug('@@ sortMe:', sortMe)\n slimmed.push((sortMe[0][1] as any))\n } // map u\n debug.log(` Filter by language: ${bindings.length} -> ${slimmed.length}`)\n return slimmed\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"language.js","names":["languageCodeURIBase","defaultPreferredLanguages","addDefaults","array","concat","filter","code","includes","getPreferredLanguagesFor","person","doc","store","fetcher","load","list","any","ns","schema","languageCodeArray","elements","forEach","item","lang","solid","console","warn","value","startsWith","error","slice","length","push","log","join","getPreferredLanguages","authn","currentUser","me","solidLanguagePrefs","navigator","languages","map","longForm","split","language","filterByLanguage","bindings","languagePrefs","uris","binding","uri","subject","languagePrefs2","reverse","slimmed","u","sortMe","name","index","indexOf","pair","sort","debug"],"sources":["../../../../src/widgets/forms/autocomplete/language.ts"],"sourcesContent":["/* Logic to access public data stores\n*\n* including filtering resut by natural language etc\n* See https://solidos.solidcommunity.net/public/2021/01%20Building%20Solid%20Apps%20which%20use%20Public%20Data.html\n*/\n/* eslint-disable no-console */\nimport * as debug from '../../../debug'\n// import * as logic from '../index'\n// import { authn } from '../../../authn/index'\nimport { authn, store } from 'solid-logic'\nimport * as ns from '../../../ns'\nimport { Collection, NamedNode, Node } from 'rdflib'\n// import { Binding } from '../widgets/forms/autocomplete/publicData'\n// import { nativeNameForLanguageCode, englishNameForLanguageCode } from './nativeNameForLanguageCode'\n\n// const { currentUser } = logic.authn\n\nexport interface Binding {\n subject: Node;\n name?: Node\n location?: Node\n coordinates?: Node\n}\n\nexport const languageCodeURIBase = 'https://www.w3.org/ns/iana/language-code/' /// @@ unsupported on the web (2021)\n\nexport const defaultPreferredLanguages = ['en', 'fr', 'de', 'it', 'ar']\n\nexport function addDefaults (array) {\n if (!array) array = []\n return array.concat(defaultPreferredLanguages.filter(code => !array.includes(code)))\n}\n\nexport async function getPreferredLanguagesFor (person: NamedNode) {\n const doc = person.doc()\n await store.fetcher?.load(doc)\n const list = store.any(person, ns.schema('knowsLanguage'), null, doc) as Collection | undefined\n if (!list) {\n // console.log(`User ${person} has not set their languages in their profile.`)\n return defaultPreferredLanguages\n }\n const languageCodeArray: string[] = []\n list.elements.forEach(item => {\n // console.log('@@ item ' + item)\n const lang = store.any(item as any, ns.solid('publicId'), null, doc)\n if (!lang) {\n console.warn('getPreferredLanguages: No publiID of language.')\n return\n }\n if (!lang.value.startsWith(languageCodeURIBase)) {\n console.error(`What should be a language code ${lang.value} does not start with ${languageCodeURIBase}`)\n return\n }\n const code = lang.value.slice(languageCodeURIBase.length)\n languageCodeArray.push(code)\n })\n\n if (languageCodeArray.length > 0) {\n console.log(` User knows languages with codes: \"${languageCodeArray.join(',')}\"`)\n return addDefaults(languageCodeArray)\n }\n return null\n}\n/* Get the preferred langauges for the user\n *\n * Either from solid preferences or browser preferences or default\n */\nexport async function getPreferredLanguages () {\n // In future: cache in the login session for speed, but get from profile and private prefs\n // We append the defaults so if someone's first choice is not available they don't get something very obscure\n // See https://github.com/solidos/solidos/issues/42\n const me = await authn.currentUser() as NamedNode\n if (me) { // If logged in\n const solidLanguagePrefs = await getPreferredLanguagesFor(me)\n if (solidLanguagePrefs) return solidLanguagePrefs\n }\n if (typeof navigator !== 'undefined') { // use browser settings\n if (navigator.languages) {\n return addDefaults(navigator.languages.map(longForm => longForm.split('-')[0]))\n }\n if (navigator.language) {\n return addDefaults([navigator.language.split('-')[0]])\n }\n }\n return defaultPreferredLanguages\n}\n\n/* From an array of bindings with a names for each row,\n * remove dupliacte names for the same thing, leaving the user's\n * preferred language version\n*/\n\nexport function filterByLanguage (bindings, languagePrefs) {\n const uris = {}\n bindings.forEach(binding => { // Organize names by their subject\n const uri = binding.subject.value\n uris[uri] = uris[uri] || []\n uris[uri].push(binding)\n })\n\n const languagePrefs2 = languagePrefs || defaultPreferredLanguages\n languagePrefs2.reverse() // Preferred last\n\n const slimmed = ([] as Array<Binding>)\n // console.log(` @@ {languagePrefs2 ${languagePrefs2}`)\n for (const u in uris) { // needs hasOwnProperty ?\n const bindings = uris[u]\n const sortMe = bindings.map(binding => {\n const lang = binding.name['xml:lang']\n const index = languagePrefs2.indexOf(lang)\n const pair = [index, binding]\n // console.log(` @@ lang: ${lang}, index: ${index}`)\n return pair\n })\n sortMe.sort() // best at th ebottom\n sortMe.reverse() // best at the top\n // console.debug('@@ sortMe:', sortMe)\n slimmed.push((sortMe[0][1] as any))\n } // map u\n debug.log(` Filter by language: ${bindings.length} -> ${slimmed.length}`)\n return slimmed\n}\n"],"mappings":"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"}