contacts-pane 3.0.2 → 3.0.3

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 (45) hide show
  1. package/README.md +53 -1
  2. package/dist/contactsPane.js +6487 -763
  3. package/dist/contactsPane.js.map +1 -1
  4. package/dist/contactsPane.min.js +2 -0
  5. package/dist/contactsPane.min.js.map +1 -0
  6. package/dist/styles/contactsPane.css +602 -0
  7. package/dist/styles/contactsRDFFormsEnforced.css +513 -0
  8. package/dist/styles/groupMembership.css +115 -0
  9. package/dist/styles/individual.css +12 -0
  10. package/dist/styles/localUtils.css +49 -0
  11. package/dist/styles/mugshotGallery.css +17 -0
  12. package/dist/styles/toolsPane.css +43 -0
  13. package/dist/styles/utilities.css +69 -0
  14. package/dist/styles/webidControl.css +90 -0
  15. package/package.json +23 -17
  16. package/dist/autocompleteBar.d.ts +0 -3
  17. package/dist/autocompleteBar.d.ts.map +0 -1
  18. package/dist/autocompleteBar.js +0 -90
  19. package/dist/autocompleteBar.js.map +0 -1
  20. package/dist/autocompleteField.d.ts +0 -20
  21. package/dist/autocompleteField.d.ts.map +0 -1
  22. package/dist/autocompleteField.js +0 -165
  23. package/dist/autocompleteField.js.map +0 -1
  24. package/dist/autocompletePicker.d.ts +0 -15
  25. package/dist/autocompletePicker.d.ts.map +0 -1
  26. package/dist/autocompletePicker.js +0 -253
  27. package/dist/autocompletePicker.js.map +0 -1
  28. package/dist/contactLogic.js +0 -223
  29. package/dist/contactLogic.js.map +0 -1
  30. package/dist/groupMembershipControl.js +0 -107
  31. package/dist/groupMembershipControl.js.map +0 -1
  32. package/dist/individual.js +0 -115
  33. package/dist/individual.js.map +0 -1
  34. package/dist/mintNewAddressBook.js +0 -145
  35. package/dist/mintNewAddressBook.js.map +0 -1
  36. package/dist/mugshotGallery.js +0 -264
  37. package/dist/mugshotGallery.js.map +0 -1
  38. package/dist/publicData.d.ts +0 -82
  39. package/dist/publicData.d.ts.map +0 -1
  40. package/dist/publicData.js +0 -421
  41. package/dist/publicData.js.map +0 -1
  42. package/dist/toolsPane.js +0 -671
  43. package/dist/toolsPane.js.map +0 -1
  44. package/dist/webidControl.js +0 -320
  45. package/dist/webidControl.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"toolsPane.js","names":["UI","_interopRequireWildcard","require","_solidLogic","_contactLogic","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","toolsPane","selectAllGroups","selectedGroups","groupsMainTable","book","dataBrowserContext","me","dom","kb","store","ns","VCARD","vcard","buttonStyle","pane","createElement","table","appendChild","setAttribute","headerRow","textContent","utils","label","statusRow","statusBlock","MainRow","box","context","target","noun","div","statusRegion","complain","message","console","log","widgets","errorMessageBlock","main","aclControl","ACLControlBox5","dir","ok","body","innerHTML","login","registrationControl","logSpace","stats","totalCards","each","undefined","length","groups","strings","Set","map","group","uri","sym","gg","g","push","loadIndexHandler","_event","loadIndexButton","nameEmailIndex","any","fetcher","load","style","cssText","addEventListener","statButton","checkAccessButton","checkAcces","doCard","card","acl","fixIndividualCardACL","a","groupMembers","j","checkDuplicates","nowOrWhenFetched","_ok","_message","cards","duplicates","definitive","nameless","exactDuplicates","nameOnlyDuplicates","uniquesSet","groupProblems","nameDupLog","exactDupLog","nameOnlyErrors","nameLessZeroData","nameLessIndex","namelessUniques","nameOnlyDuplicatesGroupDiff","checkOneNameless","Promise","resolve","then","_xhr","exclude","dc","filtered","x","statementsMatching","doc","filter","st","predicate","desc","cardText","$rdf","Serializer","setBase","statementsToN3","other","cardGroups","otherGroups","found","k","sameTerm","catch","checkAllNameless","namelessToCheck","slice","shift","confirm","uniques","concat","uniqueSet","exact","checkGroupMembers","forEach","groupMemberSet","groupMembers2","keepThisCodeForLaterButDisableFerossConstantConditionPolice","duplicateSet","scanForDuplicates","c","name","anyValue","namelessSet","saveCleanPeople","cleanPeople","sts","connectedStatements","sz","data","webOperation","contentType","saveCleanGroup","cleanGroup","s","replace","saveAllGroups","all","groupObjects","getAndSortGroups","books","gs","gs2","sort","gstr","reject","Error","fixGroupless","groupless","getGroupless","groupOfUngrouped","saveNewGroup","person","addPersonToGroup","groupIndex","reverseIndex","allAliases","y","checkGroupless","fixGrouplessButton","fixToOldDataModel","updateToOldDataModel","ds","ins","vcardOrWebids","owl","subject","contact","item","updater","updateMany","alert","fixToOldDataModelButton"],"sources":["../src/toolsPane.js"],"sourcesContent":["// The tools pane is for managing and debugging and maintaining solid contacts databases\n//\n/* global confirm, $rdf */\n\nimport * as UI from 'solid-ui'\nimport { store } from 'solid-logic'\nimport { saveNewGroup, addPersonToGroup, groupMembers } from './contactLogic'\n\nexport function toolsPane (\n selectAllGroups,\n selectedGroups,\n groupsMainTable,\n book,\n dataBrowserContext,\n me\n) {\n const dom = dataBrowserContext.dom\n const kb = store\n const ns = UI.ns\n const VCARD = ns.vcard\n\n const buttonStyle = 'font-size: 100%; margin: 0.8em; padding:0.5em;'\n const pane = dom.createElement('div')\n const table = pane.appendChild(dom.createElement('table'))\n table.setAttribute(\n 'style',\n 'font-size:120%; margin: 1em; border: 0.1em #ccc ;'\n )\n const headerRow = table.appendChild(dom.createElement('tr'))\n headerRow.textContent = UI.utils.label(book) + ' - tools'\n headerRow.setAttribute(\n 'style',\n 'min-width: 20em; padding: 1em; font-size: 150%; border-bottom: 0.1em solid red; margin-bottom: 2em;'\n )\n\n const statusRow = table.appendChild(dom.createElement('tr'))\n const statusBlock = statusRow.appendChild(dom.createElement('div'))\n statusBlock.setAttribute('style', 'padding: 2em;')\n const MainRow = table.appendChild(dom.createElement('tr'))\n const box = MainRow.appendChild(dom.createElement('table'))\n table.appendChild(dom.createElement('tr')) // bottomRow\n\n const context = {\n target: book,\n me,\n noun: 'address book',\n div: pane,\n dom,\n statusRegion: statusBlock\n }\n\n function complain (message) {\n console.log(message)\n statusBlock.appendChild(UI.widgets.errorMessageBlock(dom, message, 'pink'))\n }\n\n // Body of main pane function\n async function main () {\n box.appendChild(\n UI.aclControl.ACLControlBox5(\n book.dir(),\n dataBrowserContext,\n 'book',\n kb,\n function (ok, body) {\n if (!ok) box.innerHTML = 'ACL control box Failed: ' + body\n }\n )\n )\n\n //\n try {\n await UI.login.registrationControl(context, book, ns.vcard('AddressBook'))\n } catch (e) {\n UI.widgets.complain(context, 'registrationControl: ' + e)\n }\n console.log('Registration control finished.')\n\n // Output stats in line mode form\n const logSpace = MainRow.appendChild(dom.createElement('pre'))\n function log (message) {\n console.log(message)\n logSpace.textContent += message + '\\n'\n }\n\n function stats () {\n const totalCards = kb.each(undefined, VCARD('inAddressBook'), book).length\n log('' + totalCards + ' cards loaded. ')\n let groups = kb.each(book, VCARD('includesGroup'))\n const strings = new Set(groups.map(group => group.uri)) // remove dups\n groups = [...strings].map(uri => kb.sym(uri))\n log('' + groups.length + ' total groups. ')\n const gg = []\n for (const g in selectedGroups) {\n gg.push(g)\n }\n log('' + gg.length + ' selected groups. ')\n }\n\n async function loadIndexHandler (_event) {\n loadIndexButton.setAttribute('style', 'background-color: #ffc;')\n const nameEmailIndex = kb.any(book, ns.vcard('nameEmailIndex'))\n try {\n await kb.fetcher.load(nameEmailIndex)\n } catch (e) {\n loadIndexButton.setAttribute('style', 'background-color: #fcc;')\n log('Error: People index has NOT been loaded' + e + '\\n')\n }\n loadIndexButton.setAttribute('style', 'background-color: #cfc;')\n log(' People index has been loaded\\n')\n } // loadIndexHandler\n const loadIndexButton = pane.appendChild(dom.createElement('button'))\n loadIndexButton.textContent = 'Load main index'\n loadIndexButton.style.cssText = buttonStyle\n loadIndexButton.addEventListener('click', loadIndexHandler)\n\n const statButton = pane.appendChild(dom.createElement('button'))\n statButton.textContent = 'Statistics'\n statButton.style.cssText = buttonStyle\n statButton.addEventListener('click', stats)\n\n const checkAccessButton = pane.appendChild(dom.createElement('button'))\n checkAccessButton.textContent =\n 'Check individual card access of selected groups'\n checkAccessButton.style.cssText = buttonStyle\n async function checkAcces (_event) {\n function doCard (card) {\n UI.acl.fixIndividualCardACL(card, log, function (ok, message) {\n if (ok) {\n log('Success for ' + UI.utils.label(card))\n } else {\n log('Failure for ' + UI.utils.label(card) + ': ' + message)\n }\n })\n }\n const gg = []\n for (const g in selectedGroups) {\n gg.push(g)\n }\n\n for (let i = 0; i < gg.length; i++) {\n const g = kb.sym(gg[i])\n const a = groupMembers(kb, g)\n log(UI.utils.label(g) + ': ' + a.length + ' members')\n for (let j = 0; j < a.length; j++) {\n const card = a[j]\n log(UI.utils.label(card))\n doCard(card)\n }\n }\n }\n checkAccessButton.addEventListener('click', checkAcces)\n\n // ///////////////////////////////////////////////////////////////////////////\n //\n // DUPLICATES CHECK\n const checkDuplicates = pane.appendChild(dom.createElement('button'))\n checkDuplicates.textContent = 'Find duplicate cards'\n checkDuplicates.style.cssText = buttonStyle\n checkDuplicates.addEventListener('click', function (_event) {\n const stats = {} // global god context\n\n stats.book = book\n stats.nameEmailIndex = kb.any(book, ns.vcard('nameEmailIndex'))\n log('Loading name index...')\n\n store.fetcher.nowOrWhenFetched(\n stats.nameEmailIndex,\n undefined,\n function (_ok, _message) {\n log('Loaded name index.')\n\n stats.cards = []\n stats.duplicates = []\n stats.definitive = []\n stats.nameless = []\n\n stats.exactDuplicates = []\n stats.nameOnlyDuplicates = []\n\n stats.uniquesSet = []\n stats.groupProblems = []\n\n // Erase one card and all its files -> (err)\n //\n /*\n function eraseOne (card) {\n return new Promise(function (resolve, reject) {\n function removeFromMainIndex () {\n var indexBit = kb.connectedStatements(card, stats.nameEmailIndex)\n log('Bits of the name index file:' + indexBit)\n log('Patching main index file...')\n kb.updater.update(indexBit, [], function (uri, ok, body) {\n if (ok) {\n log('Success')\n resolve(null)\n } else {\n log('Error patching index file! ' + body)\n reject('Error patching index file! ' + body)\n }\n })\n }\n var filesToDelete = [ card.doc() ]\n var photos = kb.each(card, ns.vcard('hasPhoto')) // could be > 1\n if (photos.length) {\n filesToDelete = filesToDelete.concat(photos)\n }\n filesToDelete.push(card.dir()) // the folder last\n log('Files to delete: ' + filesToDelete)\n if (!confirm('DELETE card ' + card.dir() + ' for \"' + kb.any(card, VCARD('fn')) + '\", with ' + kb.each(card).length + 'statements?')) {\n return resolve('Cancelled by user')\n }\n\n function deleteNextFile () {\n var resource = filesToDelete.shift()\n if (!resource) {\n log('All deleted')\n removeFromMainIndex()\n resolve()\n }\n log('Deleting ... ' + resource)\n kb.fetcher.delete(resource)\n .then(function () {\n log('Deleted ok: ' + resource)\n deleteNextFile()\n })\n .catch(function (e) {\n var err = '*** ERROR deleting ' + resource + ': ' + e\n log(err)\n if (confirm('Patch out index file for card ' + card.dir() + ' EVEN THOUGH card DELETE errors?')) {\n removeFromMainIndex()\n } else {\n reject(err)\n }\n })\n }\n deleteNextFile()\n }) // Promise\n } // erase one\n */\n // Check actual records to see which are exact matches - slow\n stats.nameDupLog = kb.sym(book.dir().uri + 'dedup-nameDupLog.ttl')\n stats.exactDupLog = kb.sym(book.dir().uri + 'dedup-exactDupLog.ttl')\n /*\n function checkOne (card) {\n return new Promise(function (resolve, reject) {\n var name = kb.anyValue(card, ns.vcard('fn'))\n var other = stats.definitive[name]\n kb.fetcher.load([card, other]).then(function (xhrs) {\n var exclude = {}\n exclude[ns.vcard('hasUID').uri] = true\n exclude[ns.dc('created').uri] = true\n exclude[ns.dc('modified').uri] = true\n function filtered (x) {\n return kb.statementsMatching(null, null, null, x.doc()).filter(function (st) {\n return !exclude[st.predicate.uri]\n })\n }\n var desc = filtered(card)\n var desc2 = filtered(other)\n // var desc = connectedStatements(card, card.doc(), exclude)\n // var desc2 = connectedStatements(other, other.doc(), exclude)\n if (desc.length !== desc2.length) {\n log('CARDS to NOT match lengths ')\n stats.nameOnlyDuplicates.push(card)\n return resolve(false)\n }\n if (!desc.length) {\n log('@@@@@@ Zero length ')\n stats.nameOnlyDuplicates.push(card)\n return resolve(false)\n }\n // //////// Compare the two\n // Cheat: serialize and compare\n // var cardText = $rdf.serialize(card.doc(), kb, card.doc().uri, 'text/turtle')\n // var otherText = $rdf.serialize(other.doc(), kb, other.doc().uri, 'text/turtle')\n var cardText = (new $rdf.Serializer(kb)).setBase(card.doc().uri).statementsToN3(desc)\n var otherText = (new $rdf.Serializer(kb)).setBase(other.doc().uri).statementsToN3(desc2)\n //\n // log('Name: ' + name + ', statements: ' + desc.length)\n // log('___________________________________________')\n // log('KEEPING: ' + other.doc() + '\\n' + cardText)\n // log('___________________________________________')\n // log('DELETING: '+ card.doc() + '\\n' + otherText)\n // log('___________________________________________')\n //\n if (cardText !== otherText) {\n log('Texts differ')\n stats.nameOnlyDuplicates.push(card)\n return resolve(false)\n }\n var cardGroups = kb.each(null, ns.vcard('hasMember'), card)\n var otherGroups = kb.each(null, ns.vcard('hasMember'), other)\n for (var j = 0; j < cardGroups.length; j++) {\n var found = false\n for (var k = 0; k < otherGroups.length; k++) {\n if (otherGroups[k].sameTerm(cardGroups[j])) { found = true }\n }\n if (!found) {\n log('This one groups: ' + cardGroups)\n log('Other one groups: ' + otherGroups)\n log('Cant delete this one because it has a group, ' + cardGroups[j] + ', which the other does not.')\n stats.nameOnlyDuplicates.push(card)\n return resolve(false)\n }\n }\n console.log('Group check done -- exact duplicate: ' + card)\n stats.exactDuplicates.push(card)\n resolve(true)\n }).catch(function (e) {\n log('Cant load a card! ' + [card, other] + ': ' + e)\n stats.nameOnlyDuplicates.push(card)\n resolve(false)\n // if (confirm('Patch out index file for card ' + card.dir() + ' EVEN THOUGH card READ errors?')){\n // removeFromMainIndex()\n // }\n })\n })\n } // checkOne\n */\n stats.nameOnlyErrors = []\n stats.nameLessZeroData = []\n stats.nameLessIndex = []\n stats.namelessUniques = []\n stats.nameOnlyDuplicatesGroupDiff = []\n\n function checkOneNameless (card) {\n return new Promise(function (resolve) {\n kb.fetcher\n .load(card)\n .then(function (_xhr) {\n log(' Nameless check ' + card)\n const exclude = {}\n exclude[ns.vcard('hasUID').uri] = true\n exclude[ns.dc('created').uri] = true\n exclude[ns.dc('modified').uri] = true\n function filtered (x) {\n return kb\n .statementsMatching(null, null, null, x.doc())\n .filter(function (st) {\n return !exclude[st.predicate.uri]\n })\n }\n\n const desc = filtered(card)\n // var desc = connectedStatements(card, card.doc(), exclude)\n // var desc2 = connectedStatements(other, other.doc(), exclude)\n if (!desc.length) {\n log(' Zero length ' + card)\n stats.nameLessZeroData.push(card)\n return resolve(false)\n }\n // Compare the two\n // Cheat: serialize and compare\n // var cardText = $rdf.serialize(card.doc(), kb, card.doc().uri, 'text/turtle')\n // var otherText = $rdf.serialize(other.doc(), kb, other.doc().uri, 'text/turtle')\n const cardText = new $rdf.Serializer(kb)\n .setBase(card.doc().uri)\n .statementsToN3(desc)\n const other = stats.nameLessIndex[cardText]\n if (other) {\n log(' Matches with ' + other)\n // alain not sure it works we may need to concat with 'sameAs' group.doc (.map(st => st.why))\n const cardGroups = kb.each(null, ns.vcard('hasMember'), card)\n const otherGroups = kb.each(null, ns.vcard('hasMember'), other)\n for (let j = 0; j < cardGroups.length; j++) {\n let found = false\n for (let k = 0; k < otherGroups.length; k++) {\n if (otherGroups[k].sameTerm(cardGroups[j])) found = true\n }\n if (!found) {\n log('This one groups: ' + cardGroups)\n log('Other one groups: ' + otherGroups)\n log(\n 'Cant skip this one because it has a group, ' +\n cardGroups[j] +\n ', which the other does not.'\n )\n stats.nameOnlyDuplicatesGroupDiff.push(card)\n return resolve(false)\n }\n }\n console.log('Group check done -- exact duplicate: ' + card)\n } else {\n log('First nameless like: ' + card.doc())\n log('___________________________________________')\n log(cardText)\n log('___________________________________________')\n stats.nameLessIndex[cardText] = card\n stats.namelessUniques.push(card)\n }\n resolve(true)\n })\n .catch(function (e) {\n log('Cant load a nameless card!: ' + e)\n stats.nameOnlyErrors.push(card)\n resolve(false)\n })\n })\n } // checkOneNameless\n\n function checkAllNameless () {\n stats.namelessToCheck =\n stats.namelessToCheck || stats.nameless.slice()\n log('Nameless check left: ' + stats.namelessToCheck.length)\n return new Promise(function (resolve) {\n const x = stats.namelessToCheck.shift()\n if (!x) {\n log('namelessUniques: ' + stats.namelessUniques.length)\n log('namelessUniques: ' + stats.namelessUniques)\n if (stats.namelessUniques.length > 0 &&\n confirm(\n 'Add all ' +\n stats.namelessUniques.length +\n ' nameless cards to the rescued set?'\n )\n ) {\n stats.uniques = stats.uniques.concat(stats.namelessUniques)\n for (let k = 0; k < stats.namelessUniques.length; k++) {\n stats.uniqueSet[stats.namelessUniques[k].uri] = true\n }\n }\n return resolve(true)\n }\n checkOneNameless(x).then(function (exact) {\n log(' Nameless check returns ' + exact)\n checkAllNameless() // loop\n })\n })\n }\n\n function checkGroupMembers () {\n return new Promise(function (resolve) {\n // var inUniques = 0\n log('Groups loaded')\n for (let i = 0; i < stats.uniques.length; i++) {\n stats.uniquesSet[stats.uniques[i].uri] = true\n }\n stats.groupMembers = []\n kb.each(null, ns.vcard('hasMember'))\n .forEach(group => { stats.groupMembers = stats.groupMembers.concat(groupMembers(kb, group)) })\n log(' Naive group members ' + stats.groupMembers.length)\n stats.groupMemberSet = []\n for (let j = 0; j < stats.groupMembers.length; j++) {\n stats.groupMemberSet[stats.groupMembers[j].uri] =\n stats.groupMembers[j]\n }\n stats.groupMembers2 = []\n for (const g in stats.groupMemberSet) {\n stats.groupMembers2.push(stats.groupMemberSet[g])\n }\n log(' Compact group members ' + stats.groupMembers2.length)\n\n if (\n $rdf.keepThisCodeForLaterButDisableFerossConstantConditionPolice\n ) {\n // Don't inspect as seems groups membership is complete\n for (let i = 0; i < stats.groupMembers.length; i++) {\n const card = stats.groupMembers[i]\n if (stats.uniquesSet[card.uri]) {\n // inUniques += 1\n } else {\n log(' Not in uniques: ' + card)\n stats.groupProblems.push(card)\n if (stats.duplicateSet[card.uri]) {\n log(' ** IN duplicates alas:' + card)\n } else {\n log(' **** WTF?')\n }\n }\n }\n log('Problem cards: ' + stats.groupProblems.length)\n } // if\n resolve(true)\n })\n } // checkGroupMembers\n\n function scanForDuplicates () {\n return new Promise(function (resolve) {\n stats.cards = kb.each(undefined, VCARD('inAddressBook'), stats.book)\n log('' + stats.cards.length + ' total cards')\n\n let c, card, name\n for (c = 0; c < stats.cards.length; c++) {\n card = stats.cards[c]\n name = kb.anyValue(card, ns.vcard('fn'))\n if (!name) {\n stats.nameless.push(card)\n continue\n }\n if (stats.definitive[name] === card) {\n // pass\n } else if (stats.definitive[name]) {\n const n = stats.duplicates.length\n if (n < 100 || (n < 1000 && n % 10 === 0) || n % 100 === 0) {\n // log('' + n + ') Possible duplicate ' + card + ' of: ' + definitive[name])\n }\n stats.duplicates.push(card)\n } else {\n stats.definitive[name] = card\n }\n }\n\n stats.duplicateSet = []\n for (let i = 0; i < stats.duplicates.length; i++) {\n stats.duplicateSet[stats.duplicates[i].uri] = stats.duplicates[i]\n }\n stats.namelessSet = []\n for (let i = 0; i < stats.nameless.length; i++) {\n stats.namelessSet[stats.nameless[i].uri] = stats.nameless[i]\n }\n stats.uniques = []\n stats.uniqueSet = []\n for (let i = 0; i < stats.cards.length; i++) {\n const uri = stats.cards[i].uri\n if (!stats.duplicateSet[uri] && !stats.namelessSet[uri]) {\n stats.uniques.push(stats.cards[i])\n stats.uniqueSet[uri] = stats.cards[i]\n }\n }\n log('Uniques: ' + stats.uniques.length)\n\n log('' + stats.nameless.length + ' nameless cards.')\n log(\n '' +\n stats.duplicates.length +\n ' name-duplicate cards, leaving ' +\n (stats.cards.length - stats.duplicates.length)\n )\n resolve(true)\n })\n }\n\n // Save a new clean version\n function saveCleanPeople () {\n let cleanPeople\n\n return Promise.resolve()\n .then(() => {\n cleanPeople = kb.sym(stats.book.dir().uri + 'clean-people.ttl')\n let sts = []\n for (let i = 0; i < stats.uniques.length; i++) {\n sts = sts.concat(\n kb.connectedStatements(stats.uniques[i], stats.nameEmailIndex)\n )\n }\n const sz = new $rdf.Serializer(kb).setBase(stats.nameEmailIndex.uri)\n log('Serializing index of uniques...')\n const data = sz.statementsToN3(sts)\n\n return kb.fetcher.webOperation('PUT', cleanPeople, {\n data,\n contentType: 'text/turtle'\n })\n })\n .then(function () {\n log('Done uniques log ' + cleanPeople)\n return true\n })\n .catch(function (e) {\n log('Error saving uniques: ' + e)\n })\n }\n\n function saveCleanGroup (g) {\n let cleanGroup\n\n return Promise.resolve()\n .then(() => {\n const s = g.uri.replace('/Group/', '/NewGroup/')\n cleanGroup = kb.sym(s)\n let sts = []\n for (let i = 0; i < stats.uniques.length; i++) {\n sts = sts.concat(\n kb.connectedStatements(stats.uniques[i], g.doc())\n )\n }\n const sz = new $rdf.Serializer(kb).setBase(g.uri)\n log(' Regenerating group of uniques...' + cleanGroup)\n const data = sz.statementsToN3(sts)\n\n return kb.fetcher.webOperation('PUT', cleanGroup, {\n data,\n contentType: 'text/turtle'\n })\n })\n .then(() => {\n log(' Done uniques group ' + cleanGroup)\n return true\n })\n .catch(e => {\n log('Error saving : ' + e)\n })\n }\n\n function saveAllGroups () {\n log('Saving ALL GROUPS')\n return Promise.all(stats.groupObjects.map(saveCleanGroup))\n }\n\n const getAndSortGroups = function () {\n let groups = []\n if (stats.book) {\n const books = [stats.book]\n books.forEach(function (book) {\n const gs = book ? kb.each(book, ns.vcard('includesGroup')) : []\n const gs2 = gs.map(function (g) {\n return [book, kb.any(g, ns.vcard('fn')), g]\n })\n groups = groups.concat(gs2)\n })\n groups.sort()\n }\n return groups\n }\n const groups = getAndSortGroups() // Needed?\n\n stats.groupObjects = groups.map(gstr => gstr[2])\n log('Loading ' + stats.groupObjects.length + ' groups... ')\n kb.fetcher\n .load(stats.groupObjects)\n .then(scanForDuplicates)\n .then(checkGroupMembers)\n .then(checkAllNameless)\n .then(() => {\n return new Promise(function (resolve, reject) {\n if (confirm('Write new clean versions?')) {\n resolve(true)\n } else {\n reject(new Error('User cancelled writing clean versions'))\n }\n })\n })\n .then(saveCleanPeople)\n .then(saveAllGroups)\n .then(function () {\n log('Done!')\n })\n }\n )\n })\n\n async function fixGroupless (book) {\n const groupless = await getGroupless(book)\n if (groupless.length === 0) {\n log('No groupless cards found.')\n return\n }\n const groupOfUngrouped = await saveNewGroup(book, 'ZSortThese')\n if (confirm(`Add the ${groupless.length} cards without groups to a ZSortThese group?`)) {\n for (const person of groupless) {\n log(' adding ' + person)\n await addPersonToGroup(person, groupOfUngrouped)\n }\n }\n log('People moved to group.')\n }\n\n async function getGroupless (book) {\n const groupIndex = kb.any(book, ns.vcard('groupIndex'))\n const nameEmailIndex = kb.any(book, ns.vcard('nameEmailIndex'))\n try {\n await kb.fetcher.load([nameEmailIndex, groupIndex])\n const groups = kb.each(book, ns.vcard('includesGroup'))\n await kb.fetcher.load(groups)\n } catch (e) {\n complain('Error loading stuff:' + e)\n }\n\n const reverseIndex = {}\n const groupless = []\n let groups = kb.each(book, VCARD('includesGroup'))\n const strings = new Set(groups.map(group => group.uri)) // remove dups\n groups = [...strings].map(uri => kb.sym(uri))\n log('' + groups.length + ' total groups. ')\n\n for (let i = 0; i < groups.length; i++) {\n const g = groups[i]\n const a = groupMembers(kb, g)\n\n log(UI.utils.label(g) + ': ' + a.length + ' members')\n for (let j = 0; j < a.length; j++) {\n kb.allAliases(a[j]).forEach(function (y) {\n reverseIndex[y.uri] = g\n })\n }\n }\n\n const cards = kb.each(undefined, VCARD('inAddressBook'), book)\n log('' + cards.length + ' total cards')\n for (let c = 0; c < cards.length; c++) {\n if (!reverseIndex[cards[c].uri]) {\n groupless.push(cards[c])\n log(' groupless ' + UI.utils.label(cards[c]))\n }\n }\n log('' + groupless.length + ' groupless cards.')\n return groupless\n }\n\n const checkGroupless = pane.appendChild(dom.createElement('button'))\n checkGroupless.style.cssText = buttonStyle\n checkGroupless.textContent = 'Find individuals with no group'\n checkGroupless.addEventListener('click', function (_event) {\n log('Loading groups...')\n selectAllGroups(selectedGroups, groupsMainTable, async function (ok, message) {\n if (!ok) {\n log('Load all groups: failed: ' + message)\n return\n }\n\n const nameEmailIndex = kb.any(book, ns.vcard('nameEmailIndex'))\n try {\n await kb.fetcher.load(nameEmailIndex)\n } catch (e) {\n complain(e)\n }\n log('Loaded groups and name index.')\n getGroupless(book)\n log('Groupless list finished..')\n }) // select all groups then\n })\n\n const fixGrouplessButton = pane.appendChild(dom.createElement('button'))\n fixGrouplessButton.style.cssText = buttonStyle\n fixGrouplessButton.textContent = 'Put all individuals with no group in a new group'\n fixGrouplessButton.addEventListener('click', _event => fixGroupless(book))\n\n async function fixToOldDataModel (book) {\n async function updateToOldDataModel (groups) {\n let ds = []\n let ins = []\n groups.forEach(group => {\n let vcardOrWebids = kb.statementsMatching(null, ns.owl('sameAs'), null, group.doc()).map(st => st.subject)\n const strings = new Set(vcardOrWebids.map(contact => contact.uri)) // remove dups\n vcardOrWebids = [...strings].map(uri => kb.sym(uri))\n vcardOrWebids.forEach(item => {\n if (!kb.each(item, ns.vcard('fn'), null, group.doc()).length) {\n // delete item this is a new data model, item is a webid not a card.\n ds = ds.concat(kb\n .statementsMatching(item, ns.owl('sameAs'), null, group.doc())\n .concat(kb.statementsMatching(undefined, undefined, item, group.doc())))\n // add webid card to group\n const cards = kb.each(item, ns.owl('sameAs'), null, group.doc())\n cards.forEach(card => {\n ins = ins.concat($rdf.st(card, ns.owl('sameAs'), item, group.doc()))\n .concat($rdf.st(group, ns.vcard('hasMember'), card, group.doc()))\n })\n }\n })\n })\n if (ds.length && confirm('Groups can be updated to old data model ?')) {\n await kb.updater.updateMany(ds, ins)\n alert('Update done')\n } else { if (!ds.length) alert('Nothing to update.\\nAll Groups already use the old data model.') }\n }\n let groups = kb.each(book, VCARD('includesGroup'))\n const strings = new Set(groups.map(group => group.uri)) // remove dups\n groups = [...strings].map(uri => kb.sym(uri))\n updateToOldDataModel(groups)\n }\n\n const fixToOldDataModelButton = pane.appendChild(dom.createElement('button'))\n fixToOldDataModelButton.style.cssText = buttonStyle\n fixToOldDataModelButton.textContent = 'Revert groups to old data model'\n fixToOldDataModelButton.addEventListener('click', _event => fixToOldDataModel(book))\n } // main\n main()\n return pane\n} // toolsPane\n\n// ends\n"],"mappings":"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ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;QAEU;QACA9C,KAAK,CAAC+C,UAAU,GAAGvF,EAAE,CAACmD,GAAG,CAACvD,IAAI,CAACqC,GAAG,CAAC,CAAC,CAACiB,GAAG,GAAG,sBAAsB,CAAC;QAClEV,KAAK,CAACgD,WAAW,GAAGxF,EAAE,CAACmD,GAAG,CAACvD,IAAI,CAACqC,GAAG,CAAC,CAAC,CAACiB,GAAG,GAAG,uBAAuB,CAAC;QACpE;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;QACUV,KAAK,CAACiD,cAAc,GAAG,EAAE;QACzBjD,KAAK,CAACkD,gBAAgB,GAAG,EAAE;QAC3BlD,KAAK,CAACmD,aAAa,GAAG,EAAE;QACxBnD,KAAK,CAACoD,eAAe,GAAG,EAAE;QAC1BpD,KAAK,CAACqD,2BAA2B,GAAG,EAAE;QAEtC,SAASC,gBAAgBA,CAAEzB,IAAI,EAAE;UAC/B,OAAO,IAAI0B,OAAO,CAAC,UAAUC,OAAO,EAAE;YACpChG,EAAE,CAAC4D,OAAO,CACPC,IAAI,CAACQ,IAAI,CAAC,CACV4B,IAAI,CAAC,UAAUC,IAAI,EAAE;cACpBvE,GAAG,CAAC,kBAAkB,GAAG0C,IAAI,CAAC;cAC9B,MAAM8B,OAAO,GAAG,CAAC,CAAC;cAClBA,OAAO,CAACjG,EAAE,CAACE,KAAK,CAAC,QAAQ,CAAC,CAAC8C,GAAG,CAAC,GAAG,IAAI;cACtCiD,OAAO,CAACjG,EAAE,CAACkG,EAAE,CAAC,SAAS,CAAC,C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","ignoreList":[]}
@@ -1,320 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.addWebIDToContacts = addWebIDToContacts;
7
- exports.getPersonas = getPersonas;
8
- exports.getSameAs = getSameAs;
9
- exports.isOrganization = isOrganization;
10
- exports.removeWebIDFromContacts = removeWebIDFromContacts;
11
- exports.renderIdControl = renderIdControl;
12
- exports.renderNamedPane = renderNamedPane;
13
- exports.renderPublicIdControl = renderPublicIdControl;
14
- exports.renderWebIdControl = renderWebIdControl;
15
- exports.vcardWebIDs = vcardWebIDs;
16
- var UI = _interopRequireWildcard(require("solid-ui"));
17
- var _solidLogic = require("solid-logic");
18
- var _contactLogic = require("./contactLogic");
19
- var _autocompleteBar = require("./autocompleteBar");
20
- var $rdf = _interopRequireWildcard(require("rdflib"));
21
- function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
22
- // Render a control to record the webids we have for this agent
23
-
24
- // import { renderAutoComplete } from './lib/autocompletePicker' // dbpediaParameters
25
-
26
- // import { wikidataParameters, loadPublicDataThing, wikidataClasses } from './lib/publicData' // dbpediaParameters
27
-
28
- const ns = UI.ns;
29
- const widgets = UI.widgets;
30
- const utils = UI.utils;
31
- const kb = _solidLogic.store;
32
- const style = UI.style;
33
- const wikidataClasses = widgets.publicData.wikidataClasses; // @@ move to solid-logic
34
- const wikidataParameters = widgets.publicData.wikidataParameters; // @@ move to solid-logic
35
-
36
- const WEBID_NOUN = 'Solid ID';
37
- const PUBLICID_NOUN = 'In public data';
38
- const DOWN_ARROW = UI.icons.iconBase + 'noun_1369241.svg';
39
- const UP_ARROW = UI.icons.iconBase + 'noun_1369237.svg';
40
- const webidPanelBackgroundColor = '#ffe6ff';
41
-
42
- /// ///////////////////////// Logic
43
-
44
- async function addWebIDToContacts(person, webid, urlType, kb) {
45
- /*
46
- if (!webid.startsWith('https:')) { /// @@ well we will have other protcols like DID
47
- if (webid.startsWith('http://') {
48
- webid = 'https:' + webid.slice(5) // @@ No, data won't match in store. Add the 's' on fetch()
49
- } else {
50
- throw new Error('Does not look like a webid, must start with https: ' + webid)
51
- }
52
- }
53
- */
54
-
55
- // check this is a url
56
- try {
57
- // eslint-disable-next-line no-unused-vars
58
- const _url = new URL(webid);
59
- } catch (error) {
60
- throw new Error(`${WEBID_NOUN}: ${webid} is not a valid url.`);
61
- }
62
-
63
- // create a person's webID
64
- console.log(`Adding to ${person} a ${WEBID_NOUN}: ${webid}.`);
65
- const vcardURLThing = kb.bnode();
66
- const insertables = [$rdf.st(person, ns.vcard('url'), vcardURLThing, person.doc()), $rdf.st(vcardURLThing, ns.rdf('type'), urlType, person.doc()), $rdf.st(vcardURLThing, ns.vcard('value'), webid, person.doc())];
67
- // insert WebID in groups
68
- // replace person with WebID in vcard:hasMember (WebID may already exist)
69
- // insert owl:sameAs
70
- const groups = kb.each(null, ns.vcard('hasMember'), person);
71
- let deletables = [];
72
- groups.forEach(group => {
73
- deletables = deletables.concat(kb.statementsMatching(group, ns.vcard('hasMember'), person, group.doc()));
74
- insertables.push($rdf.st(group, ns.vcard('hasMember'), kb.sym(webid), group.doc())); // May exist; do we need to check?
75
- insertables.push($rdf.st(kb.sym(webid), ns.owl('sameAs'), person, group.doc()));
76
- });
77
- try {
78
- await (0, _contactLogic.updateMany)(deletables, insertables);
79
- } catch (err) {
80
- throw new Error(`Could not create webId ${WEBID_NOUN}: ${webid}.`);
81
- }
82
- }
83
- async function removeWebIDFromContacts(person, webid, urlType, kb) {
84
- console.log(`Removing from ${person} their ${WEBID_NOUN}: ${webid}.`);
85
-
86
- // remove webID from card
87
- const existing = kb.each(person, ns.vcard('url'), null, person.doc()).filter(urlObject => kb.holds(urlObject, ns.rdf('type'), urlType, person.doc())).filter(urlObject => kb.holds(urlObject, ns.vcard('value'), webid, person.doc()));
88
- if (!existing.length) {
89
- throw new Error(`Person ${person} does not have ${WEBID_NOUN} ${webid}.`);
90
- }
91
- const vcardURLThing = existing[0];
92
- const deletables = [$rdf.st(person, ns.vcard('url'), vcardURLThing, person.doc()), $rdf.st(vcardURLThing, ns.rdf('type'), urlType, person.doc()), $rdf.st(vcardURLThing, ns.vcard('value'), webid, person.doc())];
93
- await kb.updater.update(deletables, []);
94
-
95
- // remove webIDs from groups
96
- const groups = kb.each(null, ns.vcard('hasMember'), kb.sym(webid));
97
- let removeFromGroups = [];
98
- const insertInGroups = [];
99
- groups.forEach(async group => {
100
- removeFromGroups = removeFromGroups.concat(kb.statementsMatching(kb.sym(webid), ns.owl('sameAs'), person, group.doc()));
101
- insertInGroups.push($rdf.st(group, ns.vcard('hasMember'), person, group.doc()));
102
- if (kb.statementsMatching(kb.sym(webid), ns.owl('sameAs'), null, group.doc()).length < 2) {
103
- removeFromGroups = removeFromGroups.concat(kb.statementsMatching(group, ns.vcard('hasMember'), kb.sym(webid), group.doc()));
104
- }
105
- });
106
- await (0, _contactLogic.updateMany)(removeFromGroups, insertInGroups);
107
- }
108
-
109
- // Trace things the same as this - other IDs for same thing
110
- // returns as array of node
111
- function getSameAs(kb, thing, doc) {
112
- // Should this recurse?
113
- const found = new Set();
114
- const agenda = new Set([thing.uri]);
115
- while (agenda.size) {
116
- const uri = Array.from(agenda)[0]; // clumsy
117
- agenda.delete(uri);
118
- if (found.has(uri)) continue;
119
- found.add(uri);
120
- const node = kb.sym(uri);
121
- kb.each(node, ns.owl('sameAs'), null, doc).concat(kb.each(null, ns.owl('sameAs'), node, doc)).forEach(next => {
122
- console.log(' OWL sameAs found ' + next);
123
- agenda.add(next.uri);
124
- });
125
- kb.each(node, ns.schema('sameAs'), null, doc).concat(kb.each(null, ns.schema('sameAs'), node, doc)).forEach(next => {
126
- console.log(' Schema sameAs found ' + next);
127
- agenda.add(next.uri);
128
- });
129
- }
130
- found.delete(thing.uri); // don't want the one we knew about
131
- return Array.from(found).map(uri => kb.sym(uri)); // return as array of nodes
132
- }
133
-
134
- // find person webIDs
135
- function getPersonas(kb, person) {
136
- const lits = vcardWebIDs(kb, person).concat(getSameAs(kb, person, person.doc()));
137
- const strings = new Set(lits.map(lit => lit.value)); // remove dups
138
- const personas = [...strings].map(uri => kb.sym(uri)); // The UI tables do better with Named Nodes than Literals
139
- personas.sort(); // for repeatability
140
- personas.filter(x => !x.sameTerm(person));
141
- return personas;
142
- }
143
- function vcardWebIDs(kb, person, urlType) {
144
- return kb.each(person, ns.vcard('url'), null, person.doc()).filter(urlObject => kb.holds(urlObject, ns.rdf('type'), urlType, person.doc())).map(urlObject => kb.any(urlObject, ns.vcard('value'), null, person.doc())).filter(x => !!x); // remove nulls
145
- }
146
- function isOrganization(agent) {
147
- const doc = agent.doc();
148
- return kb.holds(agent, ns.rdf('type'), ns.vcard('Organization'), doc) || kb.holds(agent, ns.rdf('type'), ns.schema('Organization'), doc);
149
- }
150
- /// ////////////////////////////////////////////////////////////// UI
151
-
152
- // Utility function to render another different pane
153
-
154
- function renderNamedPane(dom, subject, paneName, dataBrowserContext) {
155
- const p = dataBrowserContext.session.paneRegistry.byName(paneName);
156
- const d = p.render(subject, dataBrowserContext); // @@@ change some bits of context!
157
- d.setAttribute('style', 'border: 0.1em solid #444; border-radius: 0.5em');
158
- return d;
159
- }
160
- async function renderWebIdControl(person, dataBrowserContext) {
161
- const options = {
162
- longPrompt: `If you know someone's ${WEBID_NOUN}, you can do more stuff with them.
163
- To record their ${WEBID_NOUN}, drag it onto the plus, or click the plus
164
- to enter it by hand.`,
165
- idNoun: WEBID_NOUN,
166
- urlType: ns.vcard('WebID')
167
- };
168
- return renderIdControl(person, dataBrowserContext, options);
169
- }
170
- async function renderPublicIdControl(person, dataBrowserContext) {
171
- let orgClass = kb.sym('http://www.wikidata.org/wiki/Q43229');
172
- let orgClassId = 'Organization';
173
- for (const classId in wikidataClasses) {
174
- if (kb.holds(person, ns.rdf('type'), ns.schema(classId), person.doc())) {
175
- orgClass = kb.sym(wikidataClasses[classId]);
176
- orgClassId = classId;
177
- console.log(` renderPublicIdControl bingo: ${classId} -> ${orgClass}`);
178
- }
179
- }
180
- const options = {
181
- longPrompt: `If you know the ${PUBLICID_NOUN} of this ${orgClassId}, you can do more stuff with it.
182
- To record its ${PUBLICID_NOUN}, drag it onto the plus, or click the magnifyinng glass
183
- to search for it in WikiData.`,
184
- idNoun: PUBLICID_NOUN,
185
- urlType: ns.vcard('PublicId'),
186
- dbLookup: true,
187
- class: orgClass,
188
- // Organization
189
- queryParams: wikidataParameters
190
- };
191
- return renderIdControl(person, dataBrowserContext, options);
192
- }
193
-
194
- // The main control rendered by this module
195
- async function renderIdControl(person, dataBrowserContext, options) {
196
- // IDs which are as WebId in VCARD data
197
- // like :me vcard:hasURL [ a vcard:WebId; vcard:value <https://...foo> ]
198
- //
199
- // Display the data about x specifically stored at x.doc()
200
- // in a fold-away thing
201
- //
202
- function renderPersona(dom, persona, kb) {
203
- function profileOpenHandler(_event) {
204
- profileIsVisible = !profileIsVisible;
205
- main.style.visibility = profileIsVisible ? 'visible' : 'collapse';
206
- openButton.children[0].src = profileIsVisible ? UP_ARROW : DOWN_ARROW; // @@ fragile
207
- }
208
- function renderNewRow(webidObject) {
209
- const webid = new $rdf.Literal(webidObject.uri);
210
- async function deleteFunction() {
211
- try {
212
- await removeWebIDFromContacts(person, webid, options.urlType, kb);
213
- } catch (err) {
214
- div.appendChild(widgets.errorMessageBlock(dom, `Error removing Id ${webid} from ${person}: ${err}`));
215
- }
216
- await refreshWebIDTable();
217
- }
218
- const isWebId = options.urlType.sameTerm(ns.vcard('WebID'));
219
- const delFunParam = options.editable ? deleteFunction : null;
220
- const opts = {
221
- deleteFunction: delFunParam,
222
- draggable: true
223
- };
224
- if (isWebId) {
225
- opts.title = webidObject.uri.split('/')[2];
226
- opts.image = widgets.faviconOrDefault(dom, webidObject.site()); // just for domain
227
- }
228
- const row = widgets.personTR(dom, UI.ns.foaf('knows'), webidObject, opts);
229
- if (isWebId) {
230
- row.children[1].textConent = opts.title; // @@ will be overwritten
231
- row.style.backgroundColor = webidPanelBackgroundColor;
232
- }
233
- row.style.padding = '0.2em';
234
- return row;
235
- }
236
- const div = dom.createElement('div');
237
- div.style.width = '100%';
238
- const personaTable = div.appendChild(dom.createElement('table'));
239
- personaTable.style.width = '100%';
240
- const nav = personaTable.appendChild(renderNewRow(persona));
241
- nav.style.width = '100%';
242
- const mainRow = personaTable.appendChild(dom.createElement('tr'));
243
- const mainCell = mainRow.appendChild(dom.createElement('td'));
244
- mainCell.setAttribute('colspan', 3);
245
- let main;
246
- let profileIsVisible = true;
247
- const rhs = nav.children[2];
248
- const openButton = rhs.appendChild(widgets.button(dom, DOWN_ARROW, 'View', profileOpenHandler));
249
- openButton.style.float = 'right';
250
- delete openButton.style.backgroundColor;
251
- delete openButton.style.border;
252
- const paneName = isOrganization(person) || isOrganization(persona) ? 'profile' : 'profile'; // was default for org
253
-
254
- widgets.publicData.loadPublicDataThing(kb, person, persona).then(_resp => {
255
- // loadPublicDataThing(kb, person, persona).then(_resp => {
256
- try {
257
- main = renderNamedPane(dom, persona, paneName, dataBrowserContext);
258
- console.log('main: ', main);
259
- main.style.width = '100%';
260
- console.log('renderIdControl: main element: ', main);
261
- // main.style.visibility = 'collapse'
262
- mainCell.appendChild(main);
263
- } catch (err) {
264
- main = widgets.errorMessageBlock(dom, `Problem displaying persona ${persona}: ${err}`);
265
- mainCell.appendChild(main);
266
- }
267
- }, err => {
268
- main = widgets.errorMessageBlock(dom, `Error loading persona ${persona}: ${err}`);
269
- mainCell.appendChild(main);
270
- });
271
- return div;
272
- } // renderPersona
273
-
274
- async function refreshWebIDTable() {
275
- const personas = getPersonas(kb, person);
276
- console.log('WebId personas: ' + person + ' -> ' + personas.map(p => p.uri).join(',\n '));
277
- prompt.style.display = personas.length ? 'none' : '';
278
- utils.syncTableToArrayReOrdered(profileArea, personas, persona => renderPersona(dom, persona, kb));
279
- }
280
- async function addOneIdAndRefresh(person, webid) {
281
- try {
282
- await addWebIDToContacts(person, webid, options.urlType, kb);
283
- } catch (err) {
284
- div.appendChild(widgets.errorMessageBlock(dom, `Error adding Id ${webid} to ${person}: ${err}`));
285
- }
286
- await refreshWebIDTable();
287
- }
288
- const {
289
- dom
290
- } = dataBrowserContext;
291
- options = options || {};
292
- options.editable = kb.updater.editable(person.doc().uri, kb);
293
- const div = dom.createElement('div');
294
- div.style = 'border-radius:0.3em; border: 0.1em solid #888;'; // padding: 0.8em;
295
-
296
- if (getPersonas(kb, person).length === 0 && !options.editable) {
297
- div.style.display = 'none';
298
- return div; // No point listing an empty list you can't change
299
- }
300
- const h4 = div.appendChild(dom.createElement('h4'));
301
- h4.textContent = options.idNoun;
302
- h4.style = style.formHeadingStyle;
303
- h4.style.color = style.highlightColor;
304
- const prompt = div.appendChild(dom.createElement('p'));
305
- prompt.style = style.commentStyle;
306
- prompt.textContent = options.longPrompt;
307
- const table = div.appendChild(dom.createElement('table'));
308
- table.style.width = '100%';
309
- if (options.editable) {
310
- // test
311
- options.manualURIEntry = true; // introduced in solid-ui 2.4.2
312
- options.queryParams = options.queryParams || wikidataParameters;
313
- div.appendChild(await (0, _autocompleteBar.renderAutocompleteControl)(dom, person, options, addOneIdAndRefresh));
314
- // div.appendChild(await widgets.renderAutocompleteControl(dom, person, options, addOneIdAndRefresh))
315
- }
316
- const profileArea = div.appendChild(dom.createElement('div'));
317
- await refreshWebIDTable();
318
- return div;
319
- }
320
- //# sourceMappingURL=webidControl.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"webidControl.js","names":["UI","_interopRequireWildcard","require","_solidLogic","_contactLogic","_autocompleteBar","$rdf","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ns","widgets","utils","kb","store","style","wikidataClasses","publicData","wikidataParameters","WEBID_NOUN","PUBLICID_NOUN","DOWN_ARROW","icons","iconBase","UP_ARROW","webidPanelBackgroundColor","addWebIDToContacts","person","webid","urlType","_url","URL","error","Error","console","log","vcardURLThing","bnode","insertables","st","vcard","doc","rdf","groups","each","deletables","forEach","group","concat","statementsMatching","push","sym","owl","updateMany","err","removeWebIDFromContacts","existing","filter","urlObject","holds","length","updater","update","removeFromGroups","insertInGroups","getSameAs","thing","found","Set","agenda","uri","size","Array","from","delete","add","node","next","schema","map","getPersonas","lits","vcardWebIDs","strings","lit","value","personas","sort","x","sameTerm","any","isOrganization","agent","renderNamedPane","dom","subject","paneName","dataBrowserContext","p","session","paneRegistry","byName","d","render","setAttribute","renderWebIdControl","options","longPrompt","idNoun","renderIdControl","renderPublicIdControl","orgClass","orgClassId","classId","dbLookup","class","queryParams","renderPersona","persona","profileOpenHandler","_event","profileIsVisible","main","visibility","openButton","children","src","renderNewRow","webidObject","Literal","deleteFunction","div","appendChild","errorMessageBlock","refreshWebIDTable","isWebId","delFunParam","editable","opts","draggable","title","split","image","faviconOrDefault","site","row","personTR","foaf","textConent","backgroundColor","padding","createElement","width","personaTable","nav","mainRow","mainCell","rhs","button","float","border","loadPublicDataThing","then","_resp","join","prompt","display","syncTableToArrayReOrdered","profileArea","addOneIdAndRefresh","h4","textContent","formHeadingStyle","color","highlightColor","commentStyle","table","manualURIEntry","renderAutocompleteControl"],"sources":["../src/webidControl.js"],"sourcesContent":["// Render a control to record the webids we have for this agent\n\nimport * as UI from 'solid-ui'\nimport { store } from 'solid-logic'\nimport { updateMany } from './contactLogic'\n// import { renderAutoComplete } from './lib/autocompletePicker' // dbpediaParameters\nimport { renderAutocompleteControl } from './autocompleteBar'\n// import { wikidataParameters, loadPublicDataThing, wikidataClasses } from './lib/publicData' // dbpediaParameters\nimport * as $rdf from 'rdflib'\n\nconst ns = UI.ns\nconst widgets = UI.widgets\nconst utils = UI.utils\nconst kb = store\nconst style = UI.style\n\nconst wikidataClasses = widgets.publicData.wikidataClasses // @@ move to solid-logic\nconst wikidataParameters = widgets.publicData.wikidataParameters // @@ move to solid-logic\n\nconst WEBID_NOUN = 'Solid ID'\nconst PUBLICID_NOUN = 'In public data'\nconst DOWN_ARROW = UI.icons.iconBase + 'noun_1369241.svg'\nconst UP_ARROW = UI.icons.iconBase + 'noun_1369237.svg'\nconst webidPanelBackgroundColor = '#ffe6ff'\n\n/// ///////////////////////// Logic\n\nexport async function addWebIDToContacts (person, webid, urlType, kb) {\n /*\n if (!webid.startsWith('https:')) { /// @@ well we will have other protcols like DID\n if (webid.startsWith('http://') {\n webid = 'https:' + webid.slice(5) // @@ No, data won't match in store. Add the 's' on fetch()\n } else {\n throw new Error('Does not look like a webid, must start with https: ' + webid)\n }\n }\n */\n\n // check this is a url\n try {\n // eslint-disable-next-line no-unused-vars\n const _url = new URL(webid)\n } catch (error) {\n throw new Error(`${WEBID_NOUN}: ${webid} is not a valid url.`)\n }\n\n // create a person's webID\n console.log(`Adding to ${person} a ${WEBID_NOUN}: ${webid}.`)\n const vcardURLThing = kb.bnode()\n const insertables = [\n $rdf.st(person, ns.vcard('url'), vcardURLThing, person.doc()),\n $rdf.st(vcardURLThing, ns.rdf('type'), urlType, person.doc()),\n $rdf.st(vcardURLThing, ns.vcard('value'), webid, person.doc())\n ]\n // insert WebID in groups\n // replace person with WebID in vcard:hasMember (WebID may already exist)\n // insert owl:sameAs\n const groups = kb.each(null, ns.vcard('hasMember'), person)\n let deletables = []\n groups.forEach(group => {\n deletables = deletables.concat(kb.statementsMatching(group, ns.vcard('hasMember'), person, group.doc()))\n insertables.push($rdf.st(group, ns.vcard('hasMember'), kb.sym(webid), group.doc())) // May exist; do we need to check?\n insertables.push($rdf.st(kb.sym(webid), ns.owl('sameAs'), person, group.doc()))\n })\n try {\n await updateMany(deletables, insertables)\n } catch (err) { throw new Error(`Could not create webId ${WEBID_NOUN}: ${webid}.`) }\n}\n\nexport async function removeWebIDFromContacts (person, webid, urlType, kb) {\n console.log(`Removing from ${person} their ${WEBID_NOUN}: ${webid}.`)\n\n // remove webID from card\n const existing = kb.each(person, ns.vcard('url'), null, person.doc())\n .filter(urlObject => kb.holds(urlObject, ns.rdf('type'), urlType, person.doc()))\n .filter(urlObject => kb.holds(urlObject, ns.vcard('value'), webid, person.doc()))\n if (!existing.length) {\n throw new Error(`Person ${person} does not have ${WEBID_NOUN} ${webid}.`)\n }\n const vcardURLThing = existing[0]\n const deletables = [\n $rdf.st(person, ns.vcard('url'), vcardURLThing, person.doc()),\n $rdf.st(vcardURLThing, ns.rdf('type'), urlType, person.doc()),\n $rdf.st(vcardURLThing, ns.vcard('value'), webid, person.doc())\n ]\n await kb.updater.update(deletables, [])\n\n // remove webIDs from groups\n const groups = kb.each(null, ns.vcard('hasMember'), kb.sym(webid))\n let removeFromGroups = []\n const insertInGroups = []\n groups.forEach(async group => {\n removeFromGroups = removeFromGroups.concat(kb.statementsMatching(kb.sym(webid), ns.owl('sameAs'), person, group.doc()))\n insertInGroups.push($rdf.st(group, ns.vcard('hasMember'), person, group.doc()))\n if (kb.statementsMatching(kb.sym(webid), ns.owl('sameAs'), null, group.doc()).length < 2) {\n removeFromGroups = removeFromGroups.concat(kb.statementsMatching(group, ns.vcard('hasMember'), kb.sym(webid), group.doc()))\n }\n })\n await updateMany(removeFromGroups, insertInGroups)\n}\n\n// Trace things the same as this - other IDs for same thing\n// returns as array of node\nexport function getSameAs (kb, thing, doc) { // Should this recurse?\n const found = new Set()\n const agenda = new Set([thing.uri])\n\n while (agenda.size) {\n const uri = Array.from(agenda)[0] // clumsy\n agenda.delete(uri)\n if (found.has(uri)) continue\n found.add(uri)\n const node = kb.sym(uri)\n kb.each(node, ns.owl('sameAs'), null, doc)\n .concat(kb.each(null, ns.owl('sameAs'), node, doc))\n .forEach(next => {\n console.log(' OWL sameAs found ' + next)\n agenda.add(next.uri)\n })\n kb.each(node, ns.schema('sameAs'), null, doc)\n .concat(kb.each(null, ns.schema('sameAs'), node, doc))\n .forEach(next => {\n console.log(' Schema sameAs found ' + next)\n agenda.add(next.uri)\n })\n }\n found.delete(thing.uri) // don't want the one we knew about\n return Array.from(found).map(uri => kb.sym(uri)) // return as array of nodes\n}\n\n// find person webIDs\nexport function getPersonas (kb, person) {\n const lits = vcardWebIDs(kb, person).concat(getSameAs(kb, person, person.doc()))\n const strings = new Set(lits.map(lit => lit.value)) // remove dups\n const personas = [...strings].map(uri => kb.sym(uri)) // The UI tables do better with Named Nodes than Literals\n personas.sort() // for repeatability\n personas.filter(x => !x.sameTerm(person))\n return personas\n}\n\nexport function vcardWebIDs (kb, person, urlType) {\n return kb.each(person, ns.vcard('url'), null, person.doc())\n .filter(urlObject => kb.holds(urlObject, ns.rdf('type'), urlType, person.doc()))\n .map(urlObject => kb.any(urlObject, ns.vcard('value'), null, person.doc()))\n .filter(x => !!x) // remove nulls\n}\n\nexport function isOrganization (agent) {\n const doc = agent.doc()\n return kb.holds(agent, ns.rdf('type'), ns.vcard('Organization'), doc) ||\n kb.holds(agent, ns.rdf('type'), ns.schema('Organization'), doc)\n}\n/// ////////////////////////////////////////////////////////////// UI\n\n// Utility function to render another different pane\n\nexport function renderNamedPane (dom, subject, paneName, dataBrowserContext) {\n const p = dataBrowserContext.session.paneRegistry.byName(paneName)\n const d = p.render(subject, dataBrowserContext) // @@@ change some bits of context!\n d.setAttribute(\n 'style',\n 'border: 0.1em solid #444; border-radius: 0.5em'\n )\n return d\n}\n\nexport async function renderWebIdControl (person, dataBrowserContext) {\n const options = {\n longPrompt: `If you know someone's ${WEBID_NOUN}, you can do more stuff with them.\n To record their ${WEBID_NOUN}, drag it onto the plus, or click the plus\n to enter it by hand.`,\n idNoun: WEBID_NOUN,\n urlType: ns.vcard('WebID')\n }\n return renderIdControl(person, dataBrowserContext, options)\n}\n\nexport async function renderPublicIdControl (person, dataBrowserContext) {\n let orgClass = kb.sym('http://www.wikidata.org/wiki/Q43229')\n let orgClassId = 'Organization'\n for (const classId in wikidataClasses) {\n if (kb.holds(person, ns.rdf('type'), ns.schema(classId), person.doc())) {\n orgClass = kb.sym(wikidataClasses[classId])\n orgClassId = classId\n console.log(` renderPublicIdControl bingo: ${classId} -> ${orgClass}`)\n }\n }\n const options = {\n longPrompt: `If you know the ${PUBLICID_NOUN} of this ${orgClassId}, you can do more stuff with it.\n To record its ${PUBLICID_NOUN}, drag it onto the plus, or click the magnifyinng glass\n to search for it in WikiData.`,\n idNoun: PUBLICID_NOUN,\n urlType: ns.vcard('PublicId'),\n dbLookup: true,\n class: orgClass, // Organization\n queryParams: wikidataParameters\n }\n return renderIdControl(person, dataBrowserContext, options)\n}\n\n// The main control rendered by this module\nexport async function renderIdControl (person, dataBrowserContext, options) {\n // IDs which are as WebId in VCARD data\n // like :me vcard:hasURL [ a vcard:WebId; vcard:value <https://...foo> ]\n //\n // Display the data about x specifically stored at x.doc()\n // in a fold-away thing\n //\n function renderPersona (dom, persona, kb) {\n function profileOpenHandler (_event) {\n profileIsVisible = !profileIsVisible\n main.style.visibility = profileIsVisible ? 'visible' : 'collapse'\n openButton.children[0].src = profileIsVisible ? UP_ARROW : DOWN_ARROW // @@ fragile\n }\n function renderNewRow (webidObject) {\n const webid = new $rdf.Literal(webidObject.uri)\n async function deleteFunction () {\n try {\n await removeWebIDFromContacts(person, webid, options.urlType, kb)\n } catch (err) {\n div.appendChild(widgets.errorMessageBlock(dom, `Error removing Id ${webid} from ${person}: ${err}`))\n }\n await refreshWebIDTable()\n }\n const isWebId = options.urlType.sameTerm(ns.vcard('WebID'))\n const delFunParam = options.editable ? deleteFunction : null\n const opts = { deleteFunction: delFunParam, draggable: true }\n if (isWebId) {\n opts.title = webidObject.uri.split('/')[2]\n opts.image = widgets.faviconOrDefault(dom, webidObject.site()) // just for domain\n }\n const row = widgets.personTR(dom, UI.ns.foaf('knows'), webidObject, opts)\n if (isWebId) {\n row.children[1].textConent = opts.title // @@ will be overwritten\n row.style.backgroundColor = webidPanelBackgroundColor\n }\n row.style.padding = '0.2em'\n return row\n }\n\n const div = dom.createElement('div')\n div.style.width = '100%'\n const personaTable = div.appendChild(dom.createElement('table'))\n personaTable.style.width = '100%'\n const nav = personaTable.appendChild(renderNewRow(persona))\n nav.style.width = '100%'\n const mainRow = personaTable.appendChild(dom.createElement('tr'))\n const mainCell = mainRow.appendChild(dom.createElement('td'))\n mainCell.setAttribute('colspan', 3)\n let main\n\n let profileIsVisible = true\n\n const rhs = nav.children[2]\n const openButton = rhs.appendChild(widgets.button(dom, DOWN_ARROW, 'View', profileOpenHandler))\n openButton.style.float = 'right'\n delete openButton.style.backgroundColor\n delete openButton.style.border\n const paneName = isOrganization(person) || isOrganization(persona) ? 'profile' : 'profile' // was default for org\n\n widgets.publicData.loadPublicDataThing(kb, person, persona).then(_resp => {\n // loadPublicDataThing(kb, person, persona).then(_resp => {\n try {\n main = renderNamedPane(dom, persona, paneName, dataBrowserContext)\n console.log('main: ', main)\n main.style.width = '100%'\n console.log('renderIdControl: main element: ', main)\n // main.style.visibility = 'collapse'\n mainCell.appendChild(main)\n } catch (err) {\n main = widgets.errorMessageBlock(dom, `Problem displaying persona ${persona}: ${err}`)\n mainCell.appendChild(main)\n }\n }, err => {\n main = widgets.errorMessageBlock(dom, `Error loading persona ${persona}: ${err}`)\n mainCell.appendChild(main)\n })\n return div\n } // renderPersona\n\n async function refreshWebIDTable () {\n const personas = getPersonas(kb, person)\n console.log('WebId personas: ' + person + ' -> ' + personas.map(p => p.uri).join(',\\n '))\n prompt.style.display = personas.length ? 'none' : ''\n utils.syncTableToArrayReOrdered(profileArea, personas, persona => renderPersona(dom, persona, kb))\n }\n async function addOneIdAndRefresh (person, webid) {\n try {\n await addWebIDToContacts(person, webid, options.urlType, kb)\n } catch (err) {\n div.appendChild(widgets.errorMessageBlock(dom, `Error adding Id ${webid} to ${person}: ${err}`))\n }\n await refreshWebIDTable()\n }\n\n const { dom } = dataBrowserContext\n options = options || {}\n options.editable = kb.updater.editable(person.doc().uri, kb)\n const div = dom.createElement('div')\n div.style = 'border-radius:0.3em; border: 0.1em solid #888;' // padding: 0.8em;\n\n if (getPersonas(kb, person).length === 0 && !options.editable) {\n div.style.display = 'none'\n return div // No point listing an empty list you can't change\n }\n\n const h4 = div.appendChild(dom.createElement('h4'))\n h4.textContent = options.idNoun\n h4.style = style.formHeadingStyle\n h4.style.color = style.highlightColor\n\n const prompt = div.appendChild(dom.createElement('p'))\n prompt.style = style.commentStyle\n prompt.textContent = options.longPrompt\n const table = div.appendChild(dom.createElement('table'))\n table.style.width = '100%'\n\n if (options.editable) { // test\n options.manualURIEntry = true // introduced in solid-ui 2.4.2\n options.queryParams = options.queryParams || wikidataParameters\n div.appendChild(await renderAutocompleteControl(dom, person, options, addOneIdAndRefresh))\n // div.appendChild(await widgets.renderAutocompleteControl(dom, person, options, addOneIdAndRefresh))\n }\n const profileArea = div.appendChild(dom.createElement('div'))\n await refreshWebIDTable()\n\n return div\n}\n"],"mappings":"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","ignoreList":[]}