solid-ui 2.4.15 → 2.4.16-6d61d9de

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 (119) hide show
  1. package/README.md +6 -11
  2. package/lib/acl/acl.d.ts.map +1 -1
  3. package/lib/acl/acl.js +2 -4
  4. package/lib/acl/acl.js.map +1 -1
  5. package/lib/acl/add-agent-buttons.d.ts.map +1 -1
  6. package/lib/acl/add-agent-buttons.js +5 -5
  7. package/lib/acl/add-agent-buttons.js.map +1 -1
  8. package/lib/chat/bookmarks.js +23 -24
  9. package/lib/chat/bookmarks.js.map +1 -1
  10. package/lib/chat/chatLogic.js +338 -0
  11. package/lib/chat/chatLogic.js.map +1 -0
  12. package/lib/chat/dateFolder.js +13 -13
  13. package/lib/chat/dateFolder.js.map +1 -1
  14. package/lib/chat/infinite.js +287 -669
  15. package/lib/chat/infinite.js.map +1 -1
  16. package/lib/chat/message.js +444 -74
  17. package/lib/chat/message.js.map +1 -1
  18. package/lib/chat/messageTools.js +163 -106
  19. package/lib/chat/messageTools.js.map +1 -1
  20. package/lib/chat/thread.js +171 -41
  21. package/lib/chat/thread.js.map +1 -1
  22. package/lib/create/create.d.ts.map +1 -1
  23. package/lib/create/create.js +9 -9
  24. package/lib/create/create.js.map +1 -1
  25. package/lib/folders.js +2 -6
  26. package/lib/folders.js.map +1 -1
  27. package/lib/footer/index.js +4 -4
  28. package/lib/footer/index.js.map +1 -1
  29. package/lib/header/index.d.ts.map +1 -1
  30. package/lib/header/index.js +11 -8
  31. package/lib/header/index.js.map +1 -1
  32. package/lib/index.d.ts +4 -4
  33. package/lib/index.d.ts.map +1 -1
  34. package/lib/index.js +27 -34
  35. package/lib/index.js.map +1 -1
  36. package/lib/login/login.d.ts +130 -0
  37. package/lib/login/login.d.ts.map +1 -0
  38. package/lib/login/login.js +1412 -0
  39. package/lib/login/login.js.map +1 -0
  40. package/lib/matrix/matrix.js +2 -2
  41. package/lib/matrix/matrix.js.map +1 -1
  42. package/lib/messageArea.js +9 -10
  43. package/lib/messageArea.js.map +1 -1
  44. package/lib/pad.js +2 -2
  45. package/lib/pad.js.map +1 -1
  46. package/lib/participation.js +4 -5
  47. package/lib/participation.js.map +1 -1
  48. package/lib/preferences.js +8 -8
  49. package/lib/preferences.js.map +1 -1
  50. package/lib/{authn → signup}/config-default.js +0 -0
  51. package/lib/signup/config-default.js.map +1 -0
  52. package/lib/{authn → signup}/signup.js +0 -0
  53. package/lib/signup/signup.js.map +1 -0
  54. package/lib/table.js +2 -3
  55. package/lib/table.js.map +1 -1
  56. package/lib/tabs.js +3 -3
  57. package/lib/tabs.js.map +1 -1
  58. package/lib/utils/index.js +6 -6
  59. package/lib/utils/index.js.map +1 -1
  60. package/lib/utils/label.js +4 -4
  61. package/lib/utils/label.js.map +1 -1
  62. package/lib/versionInfo.js +3 -3
  63. package/lib/versionInfo.js.map +1 -1
  64. package/lib/webpack-bundle.js +6436 -22396
  65. package/lib/webpack-bundle.js.map +1 -1
  66. package/lib/widgets/buttons.d.ts.map +1 -1
  67. package/lib/widgets/buttons.js +24 -17
  68. package/lib/widgets/buttons.js.map +1 -1
  69. package/lib/widgets/forms/autocomplete/autocompleteBar.js +2 -2
  70. package/lib/widgets/forms/autocomplete/autocompleteBar.js.map +1 -1
  71. package/lib/widgets/forms/autocomplete/autocompleteField.js +2 -2
  72. package/lib/widgets/forms/autocomplete/autocompleteField.js.map +1 -1
  73. package/lib/widgets/forms/autocomplete/autocompletePicker.js +2 -2
  74. package/lib/widgets/forms/autocomplete/autocompletePicker.js.map +1 -1
  75. package/lib/widgets/forms/autocomplete/language.d.ts.map +1 -1
  76. package/lib/widgets/forms/autocomplete/language.js +6 -11
  77. package/lib/widgets/forms/autocomplete/language.js.map +1 -1
  78. package/lib/widgets/forms/autocomplete/publicData.d.ts +2 -1
  79. package/lib/widgets/forms/autocomplete/publicData.d.ts.map +1 -1
  80. package/lib/widgets/forms/autocomplete/publicData.js +15 -22
  81. package/lib/widgets/forms/autocomplete/publicData.js.map +1 -1
  82. package/lib/widgets/forms/basic.d.ts +1 -1
  83. package/lib/widgets/forms/basic.d.ts.map +1 -1
  84. package/lib/widgets/forms/basic.js +2 -2
  85. package/lib/widgets/forms/basic.js.map +1 -1
  86. package/lib/widgets/forms/comment.d.ts +1 -1
  87. package/lib/widgets/forms/comment.js +3 -3
  88. package/lib/widgets/forms/comment.js.map +1 -1
  89. package/lib/widgets/forms/fieldFunction.js +2 -2
  90. package/lib/widgets/forms/fieldFunction.js.map +1 -1
  91. package/lib/widgets/forms/formStyle.js +3 -3
  92. package/lib/widgets/forms/formStyle.js.map +1 -1
  93. package/lib/widgets/forms.js +11 -11
  94. package/lib/widgets/forms.js.map +1 -1
  95. package/lib/widgets/peoplePicker.js +2 -2
  96. package/lib/widgets/peoplePicker.js.map +1 -1
  97. package/package.json +3 -3
  98. package/lib/authn/authSession.d.ts +0 -4
  99. package/lib/authn/authSession.d.ts.map +0 -1
  100. package/lib/authn/authSession.js +0 -25
  101. package/lib/authn/authSession.js.map +0 -1
  102. package/lib/authn/authn.d.ts +0 -193
  103. package/lib/authn/authn.d.ts.map +0 -1
  104. package/lib/authn/authn.js +0 -2238
  105. package/lib/authn/authn.js.map +0 -1
  106. package/lib/authn/config-default.js.map +0 -1
  107. package/lib/authn/index.d.ts +0 -35
  108. package/lib/authn/index.d.ts.map +0 -1
  109. package/lib/authn/index.js +0 -44
  110. package/lib/authn/index.js.map +0 -1
  111. package/lib/authn/signup.js.map +0 -1
  112. package/lib/authn/types.d.ts +0 -25
  113. package/lib/authn/types.d.ts.map +0 -1
  114. package/lib/authn/types.js +0 -6
  115. package/lib/authn/types.js.map +0 -1
  116. package/lib/logic.d.ts +0 -8
  117. package/lib/logic.d.ts.map +0 -1
  118. package/lib/logic.js +0 -79
  119. package/lib/logic.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/chat/message.js"],"names":["UI","authn","icons","ns","media","pad","rdf","store","style","utils","widgets","dom","window","document","messageBodyStyle","label","elementForImageURI","imageUri","options","img","createElement","height","inlineImageHeightEms","trim","setAttribute","anchor","appendChild","makeDraggable","$rdf","sym","text","term","a","uri","addEventListener","openHrefInOutlineMode","textContent","nick","person","s","any","foaf","value","creatorAndDate","td1","creator","date","message","nickAnchor","fetcher","nowOrWhenFetched","doc","undefined","_ok","_body","creatorAndDateHorizontal","dateBit","fontSize","marginLeft","renderMessage","messageTable","bindings","fresh","userContext","colorizeByAuthor","content","dateString","messageRow","AJAR_date","AJAR_subject","selectedMessage","sameTerm","backgroundColor","selectedElement","done","ele","firstChild","nextSibling","newestFirst","newestfirst","insertBefore","authorAboveContent","setImage","shortDate","td2","isURI","test","para","isImage","expandImagesInline","anc","href","bgcolor","lightColorHash","getBgColor","strip","children","length","td3","toolsButton","button","iconBase","_event","toolTR","parentNode","removeChild","toolsTR","tools","parentElement","toolsTD"],"mappings":"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","sourcesContent":["/**\n * Contains the [[renderMessage]] function,\n * along with [[elementForImageURI]],\n * [[creatorAndDate]], and [[creatorAndDateHorizontal]]\n * @packageDocumentation\n */\n\n/* global $rdf */\n\nimport { messageToolbar, sentimentStripLinked } from './messageTools'\n\nimport { authn } from '../authn/index'\nimport { icons } from '../iconBase'\nimport { store } from '../logic'\nimport { media } from '../media/index'\nimport * as ns from '../ns'\nimport * as pad from '../pad'\nimport * as rdf from 'rdflib' // pull in first avoid cross-refs\nimport * as style from '../style'\nimport * as utils from '../utils'\nimport * as widgets from '../widgets'\n\nconst UI = { authn, icons, ns, media, pad, rdf, store, style, utils, widgets }\n\nconst dom = UI.dom || window.document\n// const kb = UI.store\n\nconst messageBodyStyle = UI.style.messageBodyStyle\n\nconst label = UI.utils.label\n\n/**\n * HTML component for an image\n */\nexport function elementForImageURI (imageUri, options) {\n const img = dom.createElement('img')\n let height = '10'\n if (options.inlineImageHeightEms) {\n height = ('' + options.inlineImageHeightEms).trim()\n }\n img.setAttribute(\n 'style',\n 'max-height: ' + height + 'em; border-radius: 1em; margin: 0.7em;'\n )\n // UI.widgets.makeDropTarget(img, handleURIsDroppedOnMugshot, droppedFileHandler)\n if (imageUri) img.setAttribute('src', imageUri)\n const anchor = dom.createElement('a')\n anchor.setAttribute('href', imageUri)\n anchor.setAttribute('target', 'images')\n anchor.appendChild(img)\n UI.widgets.makeDraggable(img, $rdf.sym(imageUri))\n return anchor\n}\n\nconst anchor = function (text, term) {\n // If there is no link return an element anyway\n const a = dom.createElement('a')\n if (term && term.uri) {\n a.setAttribute('href', term.uri)\n a.addEventListener('click', UI.widgets.openHrefInOutlineMode, true)\n a.setAttribute('style', 'color: #3B5998; text-decoration: none; ') // font-weight: bold\n }\n a.textContent = text\n return a\n}\n\nfunction nick (person) {\n const s = UI.store.any(person, UI.ns.foaf('nick'))\n if (s) return '' + s.value\n return '' + label(person)\n}\n\n/**\n * Displays creator and date for a chat message\n * inside the `td1` element\n */\nexport function creatorAndDate (td1, creator, date, message) {\n const nickAnchor = td1.appendChild(anchor(nick(creator), creator))\n if (creator.uri) {\n UI.store.fetcher.nowOrWhenFetched(creator.doc(), undefined, function (\n _ok,\n _body\n ) {\n nickAnchor.textContent = nick(creator)\n })\n }\n td1.appendChild(dom.createElement('br'))\n td1.appendChild(anchor(date, message))\n}\n\n/**\n * Horizontally displays creator and date for a chat message\n * inside the `td1` element\n */\nexport function creatorAndDateHorizontal (td1, creator, date, message) {\n const nickAnchor = td1.appendChild(anchor(label(creator), creator))\n if (creator.uri) {\n UI.store.fetcher.nowOrWhenFetched(creator.doc(), undefined, function (\n _ok,\n _body\n ) {\n nickAnchor.textContent = nick(creator)\n })\n }\n const dateBit = td1.appendChild(anchor(date, message))\n dateBit.style.fontSize = '80%'\n dateBit.style.marginLeft = '1em'\n td1.appendChild(dom.createElement('br'))\n}\n\n/**\n * Renders a chat message inside a `messageTable`\n */\nexport function renderMessage (\n messageTable,\n bindings,\n fresh,\n options,\n userContext\n) {\n const colorizeByAuthor =\n options.colorizeByAuthor === '1' || options.colorizeByAuthor === true\n\n const creator = bindings['?creator']\n const message = bindings['?msg']\n const date = bindings['?date']\n const content = bindings['?content']\n\n const dateString = date.value\n const messageRow = dom.createElement('tr')\n messageRow.AJAR_date = dateString\n messageRow.AJAR_subject = message\n\n if (options.selectedMessage && options.selectedMessage.sameTerm(message)) {\n messageRow.style.backgroundColor = 'yellow'\n options.selectedElement = messageRow\n messageTable.selectedElement = messageRow\n }\n\n let done = false\n for (let ele = messageTable.firstChild; ; ele = ele.nextSibling) {\n if (!ele) {\n // empty\n break\n }\n const newestFirst = options.newestfirst === true\n if (\n (dateString > ele.AJAR_date && newestFirst) ||\n (dateString < ele.AJAR_date && !newestFirst)\n ) {\n messageTable.insertBefore(messageRow, ele)\n done = true\n break\n }\n }\n if (!done) {\n messageTable.appendChild(messageRow)\n }\n\n const td1 = dom.createElement('td')\n messageRow.appendChild(td1)\n if (options.authorAboveContent) {\n const img = dom.createElement('img')\n img.setAttribute(\n 'style',\n 'max-height: 2.5em; max-width: 2.5em; border-radius: 0.5em; margin: auto;'\n )\n UI.widgets.setImage(img, creator)\n td1.appendChild(img)\n } else {\n creatorAndDate(td1, creator, UI.widgets.shortDate(dateString), message)\n }\n\n // Render the content ot the message itself\n const td2 = messageRow.appendChild(dom.createElement('td'))\n\n if (options.authorAboveContent) {\n creatorAndDateHorizontal(\n td2,\n creator,\n UI.widgets.shortDate(dateString),\n message\n )\n }\n const text = content.value.trim()\n const isURI = /^https?:\\/[^ <>]*$/i.test(text)\n let para = null\n if (isURI) {\n const isImage = /\\.(gif|jpg|jpeg|tiff|png|svg)$/i.test(text) // @@ Should use content-type not URI\n if (isImage && options.expandImagesInline) {\n const img = elementForImageURI(text, options)\n td2.appendChild(img)\n } else {\n // Link but not Image\n const anc = td2.appendChild(dom.createElement('a'))\n para = anc.appendChild(dom.createElement('p'))\n anc.href = text\n para.textContent = text\n td2.appendChild(anc)\n }\n } else {\n // text\n para = dom.createElement('p')\n td2.appendChild(para)\n para.textContent = text\n }\n if (para) {\n const bgcolor = colorizeByAuthor\n ? UI.pad.lightColorHash(creator)\n : getBgColor(fresh)\n para.setAttribute(\n 'style',\n messageBodyStyle + 'background-color: ' + bgcolor + ';'\n )\n }\n\n function getBgColor (fresh) {\n return fresh ? '#e8ffe8' : 'white'\n }\n\n // Sentiment strip\n const strip = sentimentStripLinked(message, message.doc())\n if (strip.children.length) {\n td2.appendChild(dom.createElement('br'))\n td2.appendChild(strip)\n }\n\n // Message tool bar button\n const td3 = dom.createElement('td')\n messageRow.appendChild(td3)\n const toolsButton = UI.widgets.button(\n dom,\n UI.icons.iconBase + 'noun_243787.svg',\n '...'\n )\n td3.appendChild(toolsButton)\n toolsButton.addEventListener('click', function (_event) {\n if (messageRow.toolTR) {\n // already got a toolbar? Toogle\n messageRow.parentNode.removeChild(messageRow.toolTR)\n delete messageRow.toolTR\n return\n }\n const toolsTR = dom.createElement('tr')\n const tools = messageToolbar(message, messageRow, userContext)\n tools.style =\n 'border: 0.05em solid #888; border-radius: 0 0 0.7em 0.7em; border-top: 0; height:3.5em; background-color: #fff;' // @@ fix\n if (messageRow.nextSibling) {\n messageRow.parentElement.insertBefore(toolsTR, messageRow.nextSibling)\n } else {\n messageRow.parentElement.appendChild(toolsTR)\n }\n messageRow.toolTR = toolsTR\n toolsTR.appendChild(dom.createElement('td')) // left\n const toolsTD = toolsTR.appendChild(dom.createElement('td'))\n toolsTR.appendChild(dom.createElement('td')) // right\n toolsTD.appendChild(tools)\n })\n return messageRow\n}\n"],"file":"message.js"}
1
+ {"version":3,"sources":["../../src/chat/message.js"],"names":["dom","window","document","messageBodyStyle","style","label","utils","elementForImageURI","imageUri","options","img","createElement","height","inlineImageHeightEms","trim","setAttribute","anchor","appendChild","widgets","makeDraggable","$rdf","sym","text","term","a","uri","addEventListener","openHrefInOutlineMode","textContent","nick","person","s","store","any","ns","foaf","value","creatorAndDate","td1","creator","date","message","nickAnchor","fetcher","nowOrWhenFetched","doc","undefined","_ok","_body","creatorAndDateHorizontal","dateBit","fontSize","marginLeft","renderMessageRow","channelObject","fresh","userContext","colorizeByAuthor","dct","latestVersion","content","sioc","originalMessage","edited","sameTerm","sortDate","the","messageRow","AJAR_date","AJAR_subject","authorDateOnLeft","setImage","shortDate","bothDates","td2","isURI","test","para","isImage","expandImagesInline","anc","href","bgcolor","pad","lightColorHash","getBgColor","strip","children","length","td3","toolsButton","button","icons","iconBase","_event","toolTR","parentNode","removeChild","toolsTR","tools","nextSibling","parentElement","insertBefore","toolsTD","switchToEditor","messageTable","editRow","renderMessageEditor","originalRow","visibility","revertEditing","messageEditor","handleFieldInput","sendMessage","field","fromMainField","sendComplete","_text2","oldRow","debug","warn","backgroundColor","disabled","scrollIntoView","newestFirst","focus","select","updateMessage","statusArea","errorMessageBlock","droppedFileHandler","files","base","chatDocument","dir","uploadFiles","theFile","destURI","droppedURIHandler","uris","turnOnInput","getImageDoc","imageDoc","Date","now","tookPicture","menuButton","menuHandler","buttonStyle","rhs","me","authn","currentUser","menuOptions","div","newBase","event","chatChannel","lhs","middle","innerHTML","rows","anyValue","e","code","shiftKey","shiftEnterSendsMessage","makeDropTarget","sendButton","sendIcon","cancelButton","dateFolder","leafDocumentFromDate","media","cameraButton","recordParticipation","channel","context","logIn","then","Object","assign","_context"],"mappings":"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","sourcesContent":["/** UI code for individual messages: display them, edit them\n *\n * @packageDocumentation\n */\n\n/* global $rdf */\nimport { insertMessageIntoTable } from './infinite'\nimport { messageToolbar, sentimentStripLinked } from './messageTools'\nimport { findBookmarkDocument } from './bookmarks'\nimport { mostRecentVersion, originalVersion } from './chatLogic'\nimport * as debug from '../debug'\nimport { icons } from '../iconBase'\nimport { store, authn } from 'solid-logic'\nimport { media } from '../media/index'\nimport * as ns from '../ns'\nimport * as pad from '../pad'\nimport * as style from '../style'\nimport * as utils from '../utils'\nimport * as widgets from '../widgets'\n\nconst dom = window.document\nconst messageBodyStyle = style.messageBodyStyle\n\nconst label = utils.label\n\n/**\n * HTML component for an image\n */\nexport function elementForImageURI (imageUri, options) {\n const img = dom.createElement('img')\n let height = '10'\n if (options.inlineImageHeightEms) {\n height = ('' + options.inlineImageHeightEms).trim()\n }\n img.setAttribute(\n 'style',\n 'max-height: ' + height + 'em; border-radius: 1em; margin: 0.7em;'\n )\n // widgets.makeDropTarget(img, handleURIsDroppedOnMugshot, droppedFileHandler)\n if (imageUri) img.setAttribute('src', imageUri)\n const anchor = dom.createElement('a')\n anchor.setAttribute('href', imageUri)\n anchor.setAttribute('target', 'images')\n anchor.appendChild(img)\n widgets.makeDraggable(img, $rdf.sym(imageUri))\n return anchor\n}\n\nconst anchor = function (text, term) {\n // If there is no link return an element anyway\n const a = dom.createElement('a')\n if (term && term.uri) {\n a.setAttribute('href', term.uri)\n a.addEventListener('click', widgets.openHrefInOutlineMode, true)\n a.setAttribute('style', 'color: #3B5998; text-decoration: none; ') // font-weight: bold\n }\n a.textContent = text\n return a\n}\n\nfunction nick (person) {\n const s = store.any(person, ns.foaf('nick'))\n if (s) return '' + s.value\n return '' + label(person)\n}\n\n/**\n * Displays creator and date for a chat message\n * inside the `td1` element\n */\nexport function creatorAndDate (td1, creator, date, message) {\n const nickAnchor = td1.appendChild(anchor(nick(creator), creator))\n if (creator.uri) {\n store.fetcher.nowOrWhenFetched(creator.doc(), undefined, function (\n _ok,\n _body\n ) {\n nickAnchor.textContent = nick(creator)\n })\n }\n td1.appendChild(dom.createElement('br'))\n td1.appendChild(anchor(date, message))\n}\n\n/**\n * Horizontally displays creator and date for a chat message\n * inside the `td1` element\n */\nexport function creatorAndDateHorizontal (td1, creator, date, message) {\n const nickAnchor = td1.appendChild(anchor(label(creator), creator))\n if (creator.uri) {\n store.fetcher.nowOrWhenFetched(creator.doc(), undefined, function (\n _ok,\n _body\n ) {\n nickAnchor.textContent = nick(creator)\n })\n }\n const dateBit = td1.appendChild(anchor(date, message))\n dateBit.style.fontSize = '80%'\n dateBit.style.marginLeft = '1em'\n td1.appendChild(dom.createElement('br'))\n}\n\n/**\n * Renders a chat message, read-only mode\n */\nexport function renderMessageRow (channelObject, message, fresh, options, userContext) {\n const colorizeByAuthor =\n options.colorizeByAuthor === '1' || options.colorizeByAuthor === true\n\n const creator = store.any(message, ns.foaf('maker'))\n const date = store.any(message, ns.dct('created'))\n const latestVersion = mostRecentVersion(message)\n const content = store.any(latestVersion, ns.sioc('content'))\n\n const originalMessage = originalVersion(message)\n const edited = !message.sameTerm(originalMessage)\n\n const sortDate = store.the(originalMessage, ns.dct('created'), null, originalMessage.doc()) // In message\n\n const messageRow = dom.createElement('tr')\n messageRow.AJAR_date = sortDate.value\n messageRow.AJAR_subject = message\n\n const td1 = dom.createElement('td')\n messageRow.appendChild(td1)\n if (!options.authorDateOnLeft) {\n const img = dom.createElement('img')\n img.setAttribute(\n 'style',\n 'max-height: 2.5em; max-width: 2.5em; border-radius: 0.5em; margin: auto;'\n )\n widgets.setImage(img, creator)\n td1.appendChild(img)\n } else {\n creatorAndDate(td1, creator, widgets.shortDate(sortDate.value), message)\n }\n let bothDates = widgets.shortDate(sortDate.value)\n if (edited) {\n bothDates += ' ... ' + widgets.shortDate(date.value)\n }\n\n // Render the content ot the message itself\n const td2 = messageRow.appendChild(dom.createElement('td'))\n\n if (!options.authorDateOnLeft) {\n creatorAndDateHorizontal(\n td2,\n creator,\n bothDates, // widgets.shortDate(dateString)\n message\n )\n }\n const text = content.value.trim()\n const isURI = /^https?:\\/[^ <>]*$/i.test(text)\n let para = null\n if (isURI) {\n const isImage = /\\.(gif|jpg|jpeg|tiff|png|svg)$/i.test(text) // @@ Should use content-type not URI\n if (isImage && options.expandImagesInline) {\n const img = elementForImageURI(text, options)\n td2.appendChild(img)\n } else {\n // Link but not Image\n const anc = td2.appendChild(dom.createElement('a'))\n para = anc.appendChild(dom.createElement('p'))\n anc.href = text\n para.textContent = text\n td2.appendChild(anc)\n }\n } else {\n // text\n para = dom.createElement('p')\n td2.appendChild(para)\n para.textContent = text\n }\n if (para) {\n const bgcolor = colorizeByAuthor\n ? pad.lightColorHash(creator)\n : getBgColor(fresh)\n para.setAttribute(\n 'style',\n messageBodyStyle + 'background-color: ' + bgcolor + ';'\n )\n }\n\n function getBgColor (fresh) {\n return fresh ? '#e8ffe8' : 'white'\n }\n\n // Sentiment strip\n const strip = sentimentStripLinked(message, message.doc())\n if (strip.children.length) {\n td2.appendChild(dom.createElement('br'))\n td2.appendChild(strip)\n }\n\n // Message tool bar button\n const td3 = dom.createElement('td')\n messageRow.appendChild(td3)\n const toolsButton = widgets.button(\n dom,\n icons.iconBase + 'noun_243787.svg',\n '...'\n )\n td3.appendChild(toolsButton)\n toolsButton.addEventListener('click', function (_event) {\n if (messageRow.toolTR) {\n // already got a toolbar? Toogle\n messageRow.parentNode.removeChild(messageRow.toolTR)\n delete messageRow.toolTR\n return\n }\n const toolsTR = dom.createElement('tr')\n const tools = messageToolbar(message, messageRow, userContext, channelObject)\n tools.style =\n 'border: 0.05em solid #888; border-radius: 0 0 0.7em 0.7em; border-top: 0; height:3.5em; background-color: #fff;' // @@ fix\n if (messageRow.nextSibling) {\n messageRow.parentElement.insertBefore(toolsTR, messageRow.nextSibling)\n } else {\n messageRow.parentElement.appendChild(toolsTR)\n }\n messageRow.toolTR = toolsTR\n toolsTR.appendChild(dom.createElement('td')) // left\n const toolsTD = toolsTR.appendChild(dom.createElement('td'))\n toolsTR.appendChild(dom.createElement('td')) // right\n toolsTD.appendChild(tools)\n })\n return messageRow\n}\n\nexport function switchToEditor (messageRow, message, channelObject, userContext) {\n const messageTable = messageRow.parentNode\n const editRow = renderMessageEditor(channelObject, messageTable, userContext,\n channelObject.options, mostRecentVersion(message))\n messageTable.insertBefore(editRow, messageRow)\n editRow.originalRow = messageRow\n messageRow.style.visibility = 'hidden' // Hide the original message. unhide if user cancels edit\n}\n/* Control for a new message -- or editing an old message ***************\n *\n */\nexport function renderMessageEditor (channelObject, messageTable, userContext, options, originalMessage) {\n function revertEditing (messageEditor) {\n messageEditor.originalRow.style.visibility = 'visible' // restore read-only version\n messageEditor.parentNode.removeChild(messageEditor)\n }\n\n async function handleFieldInput (_event) {\n await sendMessage(field.value, true)\n }\n\n async function sendMessage (text, fromMainField) {\n function sendComplete (message, _text2) {\n // const dateStamp = store.any(message, ns.dct('created'), null, message.doc())\n // const content = $rdf.literal(text2)\n insertMessageIntoTable(channelObject, messageTable, message, false, options, userContext) // not green\n\n if (originalMessage) { // editing another message\n const oldRow = messageEditor.originalRow\n // oldRow.style.display = '' // restore read-only version, re-attack\n if (oldRow.parentNode) {\n oldRow.parentNode.removeChild(oldRow) // No longer needed old version\n } else {\n debug.warn('No parentNode on old message ' + oldRow.textContent)\n oldRow.style.backgroundColor = '#fee'\n oldRow.style.visibility = 'hidden' // @@ FIX THIS AND REMOVE FROM DOM INSTEAD\n }\n messageEditor.parentNode.removeChild(messageEditor) // no longer need editor\n } else {\n if (fromMainField) {\n field.value = '' // clear from out for reuse\n field.setAttribute('style', messageBodyStyle)\n field.disabled = false\n field.scrollIntoView(options.newestFirst) // allign bottom (top)\n field.focus() // Start typing next line immediately\n field.select()\n }\n }\n // await channelObject.div.refresh() // Add new day if nec @@ add back\n }\n\n // const me = authn.currentUser() // Must be logged on or wuld have got login button\n if (fromMainField) {\n field.setAttribute('style', messageBodyStyle + 'color: #bbb;') // pendingedit\n field.disabled = true\n }\n\n let message\n try {\n message = await channelObject.updateMessage(text, originalMessage)\n } catch (err) {\n const statusArea = userContext.statusArea || messageEditor\n statusArea.appendChild(\n widgets.errorMessageBlock(dom, 'Error writing message: ' + err)\n )\n return\n }\n sendComplete(message, text)\n } // sendMessage\n\n // DRAG AND DROP\n function droppedFileHandler (files) {\n const base = messageTable.chatDocument.dir().uri\n widgets.uploadFiles(\n store.fetcher,\n files,\n base + 'Files',\n base + 'Pictures',\n async function (theFile, destURI) {\n // @@@@@@ Wait for each if several\n await sendMessage(destURI)\n }\n )\n }\n\n // When a set of URIs are dropped on the field\n const droppedURIHandler = async function (uris) {\n for (const uri of uris) {\n await sendMessage(uri)\n }\n }\n\n // When we are actually logged on\n function turnOnInput () {\n function getImageDoc () {\n imageDoc = $rdf.sym(\n chatDocument.dir().uri + 'Image_' + Date.now() + '.png'\n )\n return imageDoc\n }\n\n async function tookPicture (imageDoc) {\n if (imageDoc) {\n await sendMessage(imageDoc.uri)\n }\n }\n\n // Body of turnOnInput\n\n let menuButton\n if (options.menuHandler) {\n const menuButton = widgets.button(\n dom, icons.iconBase + 'noun_243787.svg', 'More')\n menuButton.setAttribute('style', style.buttonStyle + 'float: right;')\n // menuButton.addEventListener('click', _event => sendMessage(), false) (done in turnoninput)\n rhs.appendChild(menuButton)\n }\n\n if (options.menuHandler && menuButton) {\n const me = authn.currentUser()\n const menuOptions = {\n me,\n dom,\n div: null, // @@ was: div\n newBase: messageTable.chatDocument.dir().uri\n }\n menuButton.addEventListener(\n 'click',\n event => {\n options.menuHandler(event, channelObject.chatChannel, menuOptions)\n },\n false\n )\n }\n\n const me = authn.currentUser() // If already logged on\n creatorAndDate(lhs, me, '', null)\n\n field = dom.createElement('textarea')\n middle.innerHTML = ''\n middle.appendChild(field)\n field.rows = 3\n if (originalMessage) {\n field.value = store.anyValue(originalMessage, ns.sioc('content'), null, originalMessage.doc())\n }\n // field.cols = 40\n field.setAttribute('style', messageBodyStyle + 'background-color: #eef;')\n\n // Trap the Enter BEFORE it is used ti make a newline\n\n field.addEventListener(\n 'keydown',\n async function (e) {\n // User preference?\n if (e.code === 'Enter') {\n // if (e.keyCode === 13) { // deprocated https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode\n if ((!e.shiftKey && !options.shiftEnterSendsMessage) || (e.shiftKey && options.shiftEnterSendsMessage)) {\n // Shift-Enter just adds a new line\n // (note alt-enter doesn't add newline anyway on my setup - so have to use shift.\n await handleFieldInput(e)\n }\n }\n },\n false\n )\n\n widgets.makeDropTarget(field, droppedURIHandler, droppedFileHandler)\n\n rhs.innerHTML = ''\n\n sendButton = widgets.button(dom, sendIcon, 'Send')\n sendButton.style.float = 'right'\n sendButton.addEventListener('click', _event => handleFieldInput(), false)\n rhs.appendChild(sendButton)\n\n if (originalMessage) { // Are we editing another message?\n const cancelButton = rhs.appendChild(widgets.cancelButton(dom))\n cancelButton.style.float = 'left'\n // cancelButton.firstChild.style.opacity = '0.3' // moved to buttons\n cancelButton.addEventListener('click', _event => revertEditing(messageEditor), false)\n rhs.appendChild(cancelButton)\n }\n\n const chatDocument = channelObject.dateFolder.leafDocumentFromDate(new Date())\n let imageDoc\n\n middle.appendChild(\n media.cameraButton(dom, store, getImageDoc, tookPicture)\n )\n\n pad.recordParticipation(channelObject.channel, channelObject.channel.doc()) // participation =\n } // turn on inpuut\n\n // Body of renderMessageEditor\n\n let sortDate, sendIcon\n if (originalMessage) {\n sortDate = store.anyValue(originalMessage, ns.dct('created'), null, originalMessage.doc())\n // text = store.anyValue(originalMessage, ns.sioc('content'), null, originalMessage.doc())\n sendIcon = icons.iconBase + 'noun_1180158.svg' // Green check\n // cancelIcon = icons.iconBase + 'noun_1180156.svg' // Black cross\n } else {\n sendIcon = icons.iconBase + 'noun_383448.svg'\n sortDate = '9999-01-01T00:00:00Z' // ISO format for field sort\n // text = ''\n }\n const messageEditor = dom.createElement('tr')\n const lhs = dom.createElement('td')\n const middle = dom.createElement('td')\n const rhs = dom.createElement('td')\n messageEditor.appendChild(lhs)\n messageEditor.appendChild(middle)\n messageEditor.appendChild(rhs)\n messageEditor.AJAR_date = sortDate\n // messageEditor.appendChild(dom.createElement('br'))\n\n let field, sendButton\n const context = { div: middle, dom: dom }\n\n authn.logIn(context).then(context => {\n // me = context.me\n turnOnInput()\n Object.assign(context, userContext)\n findBookmarkDocument(context).then(_context => {\n // console.log('Bookmark file: ' + context.bookmarkDocument)\n })\n })\n\n return messageEditor\n} // renderMessageEditor\n"],"file":"message.js"}
@@ -17,28 +17,26 @@ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/
17
17
 
18
18
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
19
19
 
20
- var _index = require("../authn/index");
20
+ var debug = _interopRequireWildcard(require("../debug"));
21
21
 
22
22
  var _iconBase = require("../iconBase");
23
23
 
24
- var _logic = require("../logic");
25
-
26
- var _index2 = require("../media/index");
27
-
28
24
  var ns = _interopRequireWildcard(require("../ns"));
29
25
 
30
- var pad = _interopRequireWildcard(require("../pad"));
31
-
32
26
  var rdf = _interopRequireWildcard(require("rdflib"));
33
27
 
34
- var style = _interopRequireWildcard(require("../style"));
35
-
36
28
  var utils = _interopRequireWildcard(require("../utils"));
37
29
 
38
30
  var widgets = _interopRequireWildcard(require("../widgets"));
39
31
 
40
32
  var _bookmarks = require("./bookmarks");
41
33
 
34
+ var _solidLogic = require("solid-logic");
35
+
36
+ var _chatLogic = require("./chatLogic");
37
+
38
+ var _message = require("./message");
39
+
42
40
  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); }
43
41
 
44
42
  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; }
@@ -52,52 +50,26 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
52
50
  * If you made it originally: edit, delete, attach
53
51
  * @packageDocumentation
54
52
  */
55
-
56
- /* global $rdf */
53
+ // import { media } from '../media/index'
54
+ // import * as pad from '../pad'
57
55
  // pull in first avoid cross-refs
58
- var UI = {
59
- authn: _index.authn,
60
- icons: _iconBase.icons,
61
- ns: ns,
62
- media: _index2.media,
63
- pad: pad,
64
- rdf: rdf,
65
- store: _logic.store,
66
- style: style,
67
- utils: utils,
68
- widgets: widgets
69
- };
70
- var dom = window.document;
71
- var kb = _logic.store; // const label = UI.utils.label
72
- // THE UNUSED ICONS are here as reminders for possible future functionality
56
+ // import * as style from '../style'
57
+ var dom = window.document; // THE UNUSED ICONS are here as reminders for possible future functionality
73
58
  // const BOOKMARK_ICON = 'noun_45961.svg'
74
59
  // const HEART_ICON = 'noun_130259.svg' -> Add this to my (private) favorites
75
60
  // const MENU_ICON = 'noun_897914.svg'
76
61
  // const PAPERCLIP_ICON = 'noun_25830.svg' -> add attachments to this message
77
62
  // const PIN_ICON = 'noun_562340.svg' -> pin this message permanently in the chat UI
78
- // const PENCIL_ICON = 'noun_253504.svg'
63
+
64
+ var PENCIL_ICON = 'noun_253504.svg'; // edit a message
79
65
  // const SPANNER_ICON = 'noun_344563.svg' -> settings
80
66
 
81
67
  var THUMBS_UP_ICON = 'noun_1384132.svg';
82
- var THUMBS_DOWN_ICON = 'noun_1384135.svg'; // module.export = { messageTools, sentimentStripLinked, sentimentStrip }
83
- // @@@@ use the one in rdflib.js when it is avaiable and delete this
84
-
85
- function updatePromise(del, ins) {
86
- return new Promise(function (resolve, reject) {
87
- kb.updater.update(del, ins, function (uri, ok, errorBody) {
88
- if (!ok) {
89
- reject(new Error(errorBody));
90
- } else {
91
- resolve();
92
- }
93
- }); // callback
94
- }); // promise
95
- }
68
+ var THUMBS_DOWN_ICON = 'noun_1384135.svg';
96
69
  /**
97
70
  * Emoji in Unicode
98
71
  */
99
72
 
100
-
101
73
  var emoji = {};
102
74
  emoji[ns.schema('AgreeAction')] = '👍';
103
75
  emoji[ns.schema('DisagreeAction')] = '👎';
@@ -108,9 +80,11 @@ emoji[ns.schema('LikeAction')] = '❤️';
108
80
  */
109
81
 
110
82
  function sentimentStrip(target, doc) {
111
- var actions = kb.each(null, ns.schema('target'), target, doc);
83
+ // alain seems not used
84
+ var latest = (0, _chatLogic.mostRecentVersion)(target);
85
+ var actions = _solidLogic.store.holds(latest, ns.schema('dateDeleted').value, null, latest.doc()) ? _solidLogic.store.each(null, ns.schema('target'), target, doc) : [];
112
86
  var sentiments = actions.map(function (a) {
113
- return kb.any(a, ns.rdf('type'), null, doc);
87
+ return _solidLogic.store.any(a, ns.rdf('type'), null, doc);
114
88
  });
115
89
  sentiments.sort();
116
90
  var strings = sentiments.map(function (x) {
@@ -131,9 +105,9 @@ function sentimentStripLinked(target, doc) {
131
105
 
132
106
  function refresh() {
133
107
  strip.innerHTML = '';
134
- var actions = kb.each(null, ns.schema('target'), target, doc);
108
+ var actions = (0, _chatLogic.mostRecentVersion)(target).uri !== ns.schema('dateDeleted').uri ? _solidLogic.store.each(null, ns.schema('target'), target, doc) : [];
135
109
  var sentiments = actions.map(function (a) {
136
- return [kb.any(a, ns.rdf('type'), null, doc), kb.any(a, ns.schema('agent'), null, doc)];
110
+ return [_solidLogic.store.any(a, ns.rdf('type'), null, doc), _solidLogic.store.any(a, ns.schema('agent'), null, doc)];
137
111
  });
138
112
  sentiments.sort();
139
113
  sentiments.forEach(function (ss) {
@@ -164,60 +138,142 @@ function sentimentStripLinked(target, doc) {
164
138
  */
165
139
 
166
140
 
167
- function messageToolbar(message, messageRow, userContext) {
168
- var div = dom.createElement('div');
141
+ function messageToolbar(message, messageRow, userContext, channelObject) {
142
+ function deleteMessage() {
143
+ return _deleteMessage.apply(this, arguments);
144
+ }
169
145
 
170
- function closeToolbar() {
171
- div.parentElement.parentElement.removeChild(div.parentElement); // remive the TR
146
+ function _deleteMessage() {
147
+ _deleteMessage = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2() {
148
+ var author, msg, area;
149
+ return _regenerator["default"].wrap(function _callee2$(_context2) {
150
+ while (1) {
151
+ switch (_context2.prev = _context2.next) {
152
+ case 0:
153
+ author = _solidLogic.store.any(message, ns.foaf('maker'));
154
+
155
+ if (me) {
156
+ _context2.next = 5;
157
+ break;
158
+ }
159
+
160
+ alert('You can\'t delete the message, you are not logged in.');
161
+ _context2.next = 22;
162
+ break;
163
+
164
+ case 5:
165
+ if (!me.sameTerm(author)) {
166
+ _context2.next = 21;
167
+ break;
168
+ }
169
+
170
+ _context2.prev = 6;
171
+ _context2.next = 9;
172
+ return channelObject.deleteMessage(message);
173
+
174
+ case 9:
175
+ _context2.next = 18;
176
+ break;
177
+
178
+ case 11:
179
+ _context2.prev = 11;
180
+ _context2.t0 = _context2["catch"](6);
181
+ msg = 'Error deleting messaage ' + _context2.t0;
182
+ debug.warn(msg);
183
+ alert(msg);
184
+ area = userContext.statusArea || messageRow.parentNode;
185
+ area.appendChild(widgets.errorMessageBlock(dom, msg));
186
+
187
+ case 18:
188
+ messageRow.parentNode.removeChild(messageRow);
189
+ _context2.next = 22;
190
+ break;
191
+
192
+ case 21:
193
+ alert('You can\'t delete the message, you are not logged in as the author, ' + author);
194
+
195
+ case 22:
196
+ closeToolbar();
197
+
198
+ case 23:
199
+ case "end":
200
+ return _context2.stop();
201
+ }
202
+ }
203
+ }, _callee2, null, [[6, 11]]);
204
+ }));
205
+ return _deleteMessage.apply(this, arguments);
172
206
  }
173
207
 
174
- function deleteThingThen(_x) {
175
- return _deleteThingThen.apply(this, arguments);
176
- } // Things only the original author can do
208
+ function editMessage(_x) {
209
+ return _editMessage.apply(this, arguments);
210
+ } // alain TODO allow chat owner to fully delete message + sentiments and replacing messages
177
211
 
178
212
 
179
- function _deleteThingThen() {
180
- _deleteThingThen = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3(x) {
213
+ function _editMessage() {
214
+ _editMessage = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3(messageRow) {
181
215
  return _regenerator["default"].wrap(function _callee3$(_context3) {
182
216
  while (1) {
183
217
  switch (_context3.prev = _context3.next) {
184
218
  case 0:
185
- _context3.next = 2;
186
- return updatePromise(kb.connectedStatements(x), []);
219
+ if (me.value === _solidLogic.store.any(message, ns.foaf('maker')).value) {
220
+ closeToolbar(); // edit is a one-off action
187
221
 
188
- case 2:
222
+ (0, _message.switchToEditor)(messageRow, message, channelObject, userContext);
223
+ }
224
+
225
+ case 1:
189
226
  case "end":
190
227
  return _context3.stop();
191
228
  }
192
229
  }
193
230
  }, _callee3);
194
231
  }));
195
- return _deleteThingThen.apply(this, arguments);
232
+ return _editMessage.apply(this, arguments);
196
233
  }
197
234
 
198
- var me = UI.authn.currentUser(); // If already logged on
235
+ var div = dom.createElement('div'); // is message deleted ?
199
236
 
200
- if (me && kb.holds(message, ns.foaf('maker'), me)) {
201
- // button to delete the message
202
- var deleteButton = UI.widgets.deleteButtonWithCheck(dom, div, 'message', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() {
203
- return _regenerator["default"].wrap(function _callee$(_context) {
237
+ if ((0, _chatLogic.mostRecentVersion)(message).value === ns.schema('dateDeleted').value) return div;
238
+
239
+ function closeToolbar() {
240
+ div.parentElement.parentElement.removeChild(div.parentElement); // remive the TR
241
+ }
242
+
243
+ function deleteThingThen(_x2) {
244
+ return _deleteThingThen.apply(this, arguments);
245
+ } // Things only the original author can do
246
+
247
+
248
+ function _deleteThingThen() {
249
+ _deleteThingThen = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4(x) {
250
+ return _regenerator["default"].wrap(function _callee4$(_context4) {
204
251
  while (1) {
205
- switch (_context.prev = _context.next) {
252
+ switch (_context4.prev = _context4.next) {
206
253
  case 0:
207
- _context.next = 2;
208
- return kb.updater.update(kb.connectedStatements[message], []);
254
+ _context4.next = 2;
255
+ return _solidLogic.store.updater.update(_solidLogic.store.connectedStatements(x), []);
209
256
 
210
257
  case 2:
211
- closeToolbar();
212
-
213
- case 3:
214
258
  case "end":
215
- return _context.stop();
259
+ return _context4.stop();
216
260
  }
217
261
  }
218
- }, _callee);
219
- })));
220
- div.appendChild(deleteButton);
262
+ }, _callee4);
263
+ }));
264
+ return _deleteThingThen.apply(this, arguments);
265
+ }
266
+
267
+ var me = _solidLogic.authn.currentUser(); // If already logged on
268
+
269
+
270
+ if (me && _solidLogic.store.holds(message, ns.foaf('maker'), me)) {
271
+ // button to delete the message
272
+ div.appendChild(widgets.deleteButtonWithCheck(dom, div, 'message', deleteMessage)); // button to edit the message
273
+
274
+ div.appendChild(widgets.button(dom, _iconBase.icons.iconBase + PENCIL_ICON, 'edit', function () {
275
+ return editMessage(messageRow);
276
+ }));
221
277
  } // if mine
222
278
  // Things anyone can do if they have a bookmark list async
223
279
 
@@ -248,39 +304,39 @@ function messageToolbar(message, messageRow, userContext) {
248
304
  button.style.backgroundColor = action ? 'yellow' : 'white';
249
305
  }
250
306
 
251
- var button = UI.widgets.button(dom, icon, UI.utils.label(actionClass), /*#__PURE__*/function () {
252
- var _ref2 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2(_event) {
307
+ var button = widgets.button(dom, icon, utils.label(actionClass), /*#__PURE__*/function () {
308
+ var _ref = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(_event) {
253
309
  var insertMe, dirty, i, a;
254
- return _regenerator["default"].wrap(function _callee2$(_context2) {
310
+ return _regenerator["default"].wrap(function _callee$(_context) {
255
311
  while (1) {
256
- switch (_context2.prev = _context2.next) {
312
+ switch (_context.prev = _context.next) {
257
313
  case 0:
258
314
  if (!action) {
259
- _context2.next = 7;
315
+ _context.next = 7;
260
316
  break;
261
317
  }
262
318
 
263
- _context2.next = 3;
319
+ _context.next = 3;
264
320
  return deleteThingThen(action);
265
321
 
266
322
  case 3:
267
323
  action = null;
268
324
  setColor();
269
- _context2.next = 25;
325
+ _context.next = 25;
270
326
  break;
271
327
 
272
328
  case 7:
273
329
  // no action
274
- action = UI.widgets.newThing(doc);
275
- insertMe = [$rdf.st(action, ns.schema('agent'), context.me, doc), $rdf.st(action, ns.rdf('type'), actionClass, doc), $rdf.st(action, ns.schema('target'), target, doc)];
276
- _context2.next = 11;
277
- return updatePromise([], insertMe);
330
+ action = widgets.newThing(doc);
331
+ insertMe = [rdf.st(action, ns.schema('agent'), context.me, doc), rdf.st(action, ns.rdf('type'), actionClass, doc), rdf.st(action, ns.schema('target'), target, doc)];
332
+ _context.next = 11;
333
+ return _solidLogic.store.updater.update([], insertMe);
278
334
 
279
335
  case 11:
280
336
  setColor();
281
337
 
282
338
  if (!mutuallyExclusive) {
283
- _context2.next = 25;
339
+ _context.next = 25;
284
340
  break;
285
341
  }
286
342
 
@@ -290,18 +346,18 @@ function messageToolbar(message, messageRow, userContext) {
290
346
 
291
347
  case 15:
292
348
  if (!(i < mutuallyExclusive.length)) {
293
- _context2.next = 24;
349
+ _context.next = 24;
294
350
  break;
295
351
  }
296
352
 
297
353
  a = existingAction(mutuallyExclusive[i]);
298
354
 
299
355
  if (!a) {
300
- _context2.next = 21;
356
+ _context.next = 21;
301
357
  break;
302
358
  }
303
359
 
304
- _context2.next = 20;
360
+ _context.next = 20;
305
361
  return deleteThingThen(a);
306
362
 
307
363
  case 20:
@@ -310,34 +366,35 @@ function messageToolbar(message, messageRow, userContext) {
310
366
 
311
367
  case 21:
312
368
  i++;
313
- _context2.next = 15;
369
+ _context.next = 15;
314
370
  break;
315
371
 
316
372
  case 24:
317
373
  if (dirty) {
318
- // UI.widgets.refreshTree(button.parentNode) // requires them all to be immediate siblings
319
- UI.widgets.refreshTree(messageRow); // requires them all to be immediate siblings
374
+ // widgets.refreshTree(button.parentNode) // requires them all to be immediate siblings
375
+ widgets.refreshTree(messageRow); // requires them all to be immediate siblings
320
376
  }
321
377
 
322
378
  case 25:
323
379
  case "end":
324
- return _context2.stop();
380
+ return _context.stop();
325
381
  }
326
382
  }
327
- }, _callee2);
383
+ }, _callee);
328
384
  }));
329
385
 
330
- return function (_x2) {
331
- return _ref2.apply(this, arguments);
386
+ return function (_x3) {
387
+ return _ref.apply(this, arguments);
332
388
  };
333
389
  }());
334
390
 
335
391
  function existingAction(actionClass) {
336
- var actions = kb.each(null, ns.schema('agent'), context.me, doc).filter(function (x) {
337
- return kb.holds(x, ns.rdf('type'), actionClass, doc);
392
+ var actions = _solidLogic.store.each(null, ns.schema('agent'), context.me, doc).filter(function (x) {
393
+ return _solidLogic.store.holds(x, ns.rdf('type'), actionClass, doc);
338
394
  }).filter(function (x) {
339
- return kb.holds(x, ns.schema('target'), target, doc);
395
+ return _solidLogic.store.holds(x, ns.schema('target'), target, doc);
340
396
  });
397
+
341
398
  return actions.length ? actions[0] : null;
342
399
  }
343
400
 
@@ -355,23 +412,23 @@ function messageToolbar(message, messageRow, userContext) {
355
412
  // https://schema.org/AgreeAction
356
413
 
357
414
 
358
- me = UI.authn.currentUser(); // If already logged on
415
+ me = _solidLogic.authn.currentUser(); // If already logged on
416
+ // debug.log('Actions 3' + mostRecentVersion(message).value + ' ' + ns.schema('dateDeleted').value + ' ' + (mostRecentVersion(message).value !== ns.schema('dateDeleted').value))
359
417
 
360
- if (me) {
361
- // Things you mnust be logged in for
418
+ if (me && (0, _chatLogic.mostRecentVersion)(message).value !== ns.schema('dateDeleted').value) {
362
419
  var context1 = {
363
420
  me: me,
364
421
  dom: dom,
365
422
  div: div
366
423
  };
367
- div.appendChild(sentimentButton(context1, message, // @@ TODO use UI.widgets.sentimentButton
368
- UI.icons.iconBase + THUMBS_UP_ICON, ns.schema('AgreeAction'), message.doc(), [ns.schema('DisagreeAction')])); // Thumbs down
424
+ div.appendChild(sentimentButton(context1, message, // @@ TODO use widgets.sentimentButton
425
+ _iconBase.icons.iconBase + THUMBS_UP_ICON, ns.schema('AgreeAction'), message.doc(), [ns.schema('DisagreeAction')])); // Thumbs down
369
426
 
370
- div.appendChild(sentimentButton(context1, message, UI.icons.iconBase + THUMBS_DOWN_ICON, ns.schema('DisagreeAction'), message.doc(), [ns.schema('AgreeAction')]));
427
+ div.appendChild(sentimentButton(context1, message, _iconBase.icons.iconBase + THUMBS_DOWN_ICON, ns.schema('DisagreeAction'), message.doc(), [ns.schema('AgreeAction')]));
371
428
  } // X button to remove the tool UI itself
372
429
 
373
430
 
374
- var cancelButton = div.appendChild(UI.widgets.cancelButton(dom));
431
+ var cancelButton = div.appendChild(widgets.cancelButton(dom));
375
432
  cancelButton.style["float"] = 'right';
376
433
  cancelButton.firstChild.style.opacity = '0.3';
377
434
  cancelButton.addEventListener('click', closeToolbar);