solid-ui 2.4.23 → 2.4.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. package/dist/main.js +2159 -5039
  2. package/dist/main.js.map +1 -1
  3. package/lib/acl/access-controller.js +4 -67
  4. package/lib/acl/access-controller.js.map +1 -1
  5. package/lib/acl/access-groups.js +59 -137
  6. package/lib/acl/access-groups.js.map +1 -1
  7. package/lib/acl/acl-control.js +14 -54
  8. package/lib/acl/acl-control.js.map +1 -1
  9. package/lib/acl/acl.js +32 -107
  10. package/lib/acl/acl.js.map +1 -1
  11. package/lib/acl/add-agent-buttons.js +0 -92
  12. package/lib/acl/add-agent-buttons.js.map +1 -1
  13. package/lib/acl/index.js +1 -3
  14. package/lib/acl/index.js.map +1 -1
  15. package/lib/acl/styles.js +1 -2
  16. package/lib/acl/styles.js.map +1 -1
  17. package/lib/chat/bookmarks.js +8 -80
  18. package/lib/chat/bookmarks.js.map +1 -1
  19. package/lib/chat/chatLogic.js +109 -180
  20. package/lib/chat/chatLogic.js.map +1 -1
  21. package/lib/chat/dateFolder.js +6 -91
  22. package/lib/chat/dateFolder.js.map +1 -1
  23. package/lib/chat/infinite.js +33 -185
  24. package/lib/chat/infinite.js.map +1 -1
  25. package/lib/chat/message.js +37 -150
  26. package/lib/chat/message.js.map +1 -1
  27. package/lib/chat/messageTools.js +23 -96
  28. package/lib/chat/messageTools.js.map +1 -1
  29. package/lib/chat/thread.js +33 -91
  30. package/lib/chat/thread.js.map +1 -1
  31. package/lib/create/create.js +19 -51
  32. package/lib/create/create.js.map +1 -1
  33. package/lib/create/index.js +0 -2
  34. package/lib/create/index.js.map +1 -1
  35. package/lib/debug.js +0 -8
  36. package/lib/debug.js.map +1 -1
  37. package/lib/folders.js +4 -27
  38. package/lib/folders.js.map +1 -1
  39. package/lib/footer/index.js +2 -24
  40. package/lib/footer/index.js.map +1 -1
  41. package/lib/footer/styleMap.js.map +1 -1
  42. package/lib/header/empty-profile.js.map +1 -1
  43. package/lib/header/index.js +3 -72
  44. package/lib/header/index.js.map +1 -1
  45. package/lib/header/styleMap.js +4 -3
  46. package/lib/header/styleMap.js.map +1 -1
  47. package/lib/iconBase.js +3 -4
  48. package/lib/iconBase.js.map +1 -1
  49. package/lib/index.js +5 -46
  50. package/lib/index.js.map +1 -1
  51. package/lib/jss/index.js +3 -9
  52. package/lib/jss/index.js.map +1 -1
  53. package/lib/log.js +15 -51
  54. package/lib/log.js.map +1 -1
  55. package/lib/login/login.js +74 -303
  56. package/lib/login/login.js.map +1 -1
  57. package/lib/matrix/index.js +0 -2
  58. package/lib/matrix/index.js.map +1 -1
  59. package/lib/matrix/matrix.js +7 -55
  60. package/lib/matrix/matrix.js.map +1 -1
  61. package/lib/media/index.js +0 -2
  62. package/lib/media/index.js.map +1 -1
  63. package/lib/media/media-capture.js +13 -33
  64. package/lib/media/media-capture.js.map +1 -1
  65. package/lib/messageArea.js +23 -64
  66. package/lib/messageArea.js.map +1 -1
  67. package/lib/noun_Camera_1618446_000000.js.map +1 -1
  68. package/lib/ns.js +5 -7
  69. package/lib/ns.js.map +1 -1
  70. package/lib/pad.js +48 -234
  71. package/lib/pad.js.map +1 -1
  72. package/lib/participation.js +10 -65
  73. package/lib/participation.js.map +1 -1
  74. package/lib/preferences.js +21 -42
  75. package/lib/preferences.js.map +1 -1
  76. package/lib/signup/config-default.js +1 -8
  77. package/lib/signup/config-default.js.map +1 -1
  78. package/lib/signup/signup.js +6 -13
  79. package/lib/signup/signup.js.map +1 -1
  80. package/lib/stories/decorators.js +0 -2
  81. package/lib/stories/decorators.js.map +1 -1
  82. package/lib/style.js +8 -5
  83. package/lib/style.js.map +1 -1
  84. package/lib/style_multiSelect.js +1 -5
  85. package/lib/style_multiSelect.js.map +1 -1
  86. package/lib/table.js +309 -322
  87. package/lib/table.js.map +1 -1
  88. package/lib/tabs.js +20 -100
  89. package/lib/tabs.js.map +1 -1
  90. package/lib/utils/headerFooterHelpers.js +4 -52
  91. package/lib/utils/headerFooterHelpers.js.map +1 -1
  92. package/lib/utils/index.js +41 -135
  93. package/lib/utils/index.js.map +1 -1
  94. package/lib/utils/label.js +13 -34
  95. package/lib/utils/label.js.map +1 -1
  96. package/lib/versionInfo.js +4 -4
  97. package/lib/versionInfo.js.map +1 -1
  98. package/lib/widgets/buttons/iconLinks.js +0 -8
  99. package/lib/widgets/buttons/iconLinks.js.map +1 -1
  100. package/lib/widgets/buttons.js +115 -291
  101. package/lib/widgets/buttons.js.map +1 -1
  102. package/lib/widgets/dragAndDrop.js +12 -41
  103. package/lib/widgets/dragAndDrop.js.map +1 -1
  104. package/lib/widgets/error.js +3 -9
  105. package/lib/widgets/error.js.map +1 -1
  106. package/lib/widgets/forms/autocomplete/autocompleteBar.js +8 -71
  107. package/lib/widgets/forms/autocomplete/autocompleteBar.js.map +1 -1
  108. package/lib/widgets/forms/autocomplete/autocompleteField.js +13 -65
  109. package/lib/widgets/forms/autocomplete/autocompleteField.js.map +1 -1
  110. package/lib/widgets/forms/autocomplete/autocompletePicker.js +15 -107
  111. package/lib/widgets/forms/autocomplete/autocompletePicker.js.map +1 -1
  112. package/lib/widgets/forms/autocomplete/language.js +6 -55
  113. package/lib/widgets/forms/autocomplete/language.js.map +1 -1
  114. package/lib/widgets/forms/autocomplete/publicData.js +12 -131
  115. package/lib/widgets/forms/autocomplete/publicData.js.map +1 -1
  116. package/lib/widgets/forms/basic.js +12 -55
  117. package/lib/widgets/forms/basic.js.map +1 -1
  118. package/lib/widgets/forms/comment.js +1 -15
  119. package/lib/widgets/forms/comment.js.map +1 -1
  120. package/lib/widgets/forms/fieldFunction.js +3 -16
  121. package/lib/widgets/forms/fieldFunction.js.map +1 -1
  122. package/lib/widgets/forms/fieldParams.js +0 -12
  123. package/lib/widgets/forms/fieldParams.js.map +1 -1
  124. package/lib/widgets/forms/formStyle.js +1 -14
  125. package/lib/widgets/forms/formStyle.js.map +1 -1
  126. package/lib/widgets/forms.js +70 -474
  127. package/lib/widgets/forms.js.map +1 -1
  128. package/lib/widgets/index.js +0 -21
  129. package/lib/widgets/index.js.map +1 -1
  130. package/lib/widgets/multiSelect.js +48 -171
  131. package/lib/widgets/multiSelect.js.map +1 -1
  132. package/lib/widgets/peoplePicker.js +20 -90
  133. package/lib/widgets/peoplePicker.js.map +1 -1
  134. package/lib/widgets/widgetHelpers.js +2 -9
  135. package/lib/widgets/widgetHelpers.js.map +1 -1
  136. package/package.json +28 -28
@@ -1 +1 @@
1
- {"version":3,"file":"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","mostRecentVersion","content","sioc","originalMessage","originalVersion","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","sentimentStripLinked","children","length","td3","toolsButton","button","icons","iconBase","_event","toolTR","parentNode","removeChild","toolsTR","tools","messageToolbar","nextSibling","parentElement","insertBefore","toolsTD","switchToEditor","messageTable","editRow","renderMessageEditor","originalRow","visibility","revertEditing","messageEditor","handleFieldInput","sendMessage","field","fromMainField","sendComplete","_text2","insertMessageIntoTable","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","ensureLoggedIn","then","Object","assign","findBookmarkDocument","_context"],"sources":["../../src/chat/message.js"],"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 { ensureLoggedIn } from '../login/login'\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 }\n\n ensureLoggedIn(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"],"mappings":"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"}
1
+ {"version":3,"file":"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","mostRecentVersion","content","sioc","originalMessage","originalVersion","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","sentimentStripLinked","children","length","td3","toolsButton","button","icons","iconBase","_event","toolTR","parentNode","removeChild","toolsTR","tools","messageToolbar","nextSibling","parentElement","insertBefore","toolsTD","switchToEditor","messageTable","editRow","renderMessageEditor","originalRow","visibility","revertEditing","messageEditor","handleFieldInput","sendMessage","field","fromMainField","sendComplete","_text2","insertMessageIntoTable","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","ensureLoggedIn","then","Object","assign","findBookmarkDocument","_context"],"sources":["../../src/chat/message.js"],"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 { ensureLoggedIn } from '../login/login'\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 }\n\n ensureLoggedIn(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"],"mappings":"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"}
@@ -1,46 +1,28 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  var _typeof = require("@babel/runtime/helpers/typeof");
6
-
7
5
  Object.defineProperty(exports, "__esModule", {
8
6
  value: true
9
7
  });
10
8
  exports.messageToolbar = messageToolbar;
11
9
  exports.sentimentStrip = sentimentStrip;
12
10
  exports.sentimentStripLinked = sentimentStripLinked;
13
-
14
11
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
15
-
16
12
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
17
-
18
13
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
19
-
20
14
  var debug = _interopRequireWildcard(require("../debug"));
21
-
22
15
  var _iconBase = require("../iconBase");
23
-
24
16
  var ns = _interopRequireWildcard(require("../ns"));
25
-
26
17
  var rdf = _interopRequireWildcard(require("rdflib"));
27
-
28
18
  var utils = _interopRequireWildcard(require("../utils"));
29
-
30
19
  var widgets = _interopRequireWildcard(require("../widgets"));
31
-
32
20
  var _bookmarks = require("./bookmarks");
33
-
34
21
  var _solidLogic = require("solid-logic");
35
-
36
22
  var _chatLogic = require("./chatLogic");
37
-
38
23
  var _message = require("./message");
39
-
40
24
  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); }
41
-
42
25
  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; }
43
-
44
26
  /**
45
27
  * Tools for doing things with a message
46
28
  * Let us be creative here. Allow all sorts of things to
@@ -50,35 +32,37 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
50
32
  * If you made it originally: edit, delete, attach
51
33
  * @packageDocumentation
52
34
  */
35
+
53
36
  // import { media } from '../media/index'
37
+
54
38
  // import * as pad from '../pad'
55
39
  // pull in first avoid cross-refs
56
40
  // import * as style from '../style'
57
- var dom = window.document; // THE UNUSED ICONS are here as reminders for possible future functionality
41
+
42
+ var dom = window.document;
43
+
44
+ // THE UNUSED ICONS are here as reminders for possible future functionality
58
45
  // const BOOKMARK_ICON = 'noun_45961.svg'
59
46
  // const HEART_ICON = 'noun_130259.svg' -> Add this to my (private) favorites
60
47
  // const MENU_ICON = 'noun_897914.svg'
61
48
  // const PAPERCLIP_ICON = 'noun_25830.svg' -> add attachments to this message
62
49
  // const PIN_ICON = 'noun_562340.svg' -> pin this message permanently in the chat UI
63
-
64
50
  var PENCIL_ICON = 'noun_253504.svg'; // edit a message
65
51
  // const SPANNER_ICON = 'noun_344563.svg' -> settings
66
-
67
52
  var THUMBS_UP_ICON = 'noun_1384132.svg';
68
53
  var THUMBS_DOWN_ICON = 'noun_1384135.svg';
69
54
  /**
70
55
  * Emoji in Unicode
71
56
  */
72
-
73
57
  var emoji = {};
74
58
  emoji[ns.schema('AgreeAction')] = '👍';
75
59
  emoji[ns.schema('DisagreeAction')] = '👎';
76
60
  emoji[ns.schema('EndorseAction')] = '⭐️';
77
61
  emoji[ns.schema('LikeAction')] = '❤️';
62
+
78
63
  /**
79
64
  * Create strip of sentiments expressed
80
65
  */
81
-
82
66
  function sentimentStrip(target, doc) {
83
67
  // alain seems not used
84
68
  var latest = (0, _chatLogic.mostRecentVersion)(target);
@@ -98,11 +82,8 @@ function sentimentStrip(target, doc) {
98
82
  * @param target {NamedNode} - The thing about which they are expressed
99
83
  * @param doc {NamedNode} - The document in which they are expressed
100
84
  */
101
-
102
-
103
85
  function sentimentStripLinked(target, doc) {
104
86
  var strip = dom.createElement('span');
105
-
106
87
  function refresh() {
107
88
  strip.innerHTML = '';
108
89
  var actions = (0, _chatLogic.mostRecentVersion)(target).uri !== ns.schema('dateDeleted').uri ? _solidLogic.store.each(null, ns.schema('target'), target, doc) : [];
@@ -112,23 +93,19 @@ function sentimentStripLinked(target, doc) {
112
93
  sentiments.sort();
113
94
  sentiments.forEach(function (ss) {
114
95
  var _ss = (0, _slicedToArray2["default"])(ss, 2),
115
- theClass = _ss[0],
116
- agent = _ss[1];
117
-
96
+ theClass = _ss[0],
97
+ agent = _ss[1];
118
98
  var res;
119
-
120
99
  if (agent) {
121
100
  res = dom.createElement('a');
122
101
  res.setAttribute('href', agent.uri);
123
102
  } else {
124
103
  res = dom.createTextNode('');
125
104
  }
126
-
127
105
  res.textContent = emoji[theClass] || '*';
128
106
  strip.appendChild(res);
129
107
  });
130
108
  }
131
-
132
109
  refresh();
133
110
  strip.refresh = refresh;
134
111
  return strip;
@@ -136,13 +113,10 @@ function sentimentStripLinked(target, doc) {
136
113
  /**
137
114
  * Creates a message toolbar component
138
115
  */
139
-
140
-
141
116
  function messageToolbar(message, messageRow, userContext, channelObject) {
142
117
  function deleteMessage() {
143
118
  return _deleteMessage.apply(this, arguments);
144
119
  }
145
-
146
120
  function _deleteMessage() {
147
121
  _deleteMessage = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2() {
148
122
  var author, msg, area;
@@ -151,30 +125,24 @@ function messageToolbar(message, messageRow, userContext, channelObject) {
151
125
  switch (_context2.prev = _context2.next) {
152
126
  case 0:
153
127
  author = _solidLogic.store.any(message, ns.foaf('maker'));
154
-
155
128
  if (me) {
156
129
  _context2.next = 5;
157
130
  break;
158
131
  }
159
-
160
132
  alert('You can\'t delete the message, you are not logged in.');
161
133
  _context2.next = 22;
162
134
  break;
163
-
164
135
  case 5:
165
136
  if (!me.sameTerm(author)) {
166
137
  _context2.next = 21;
167
138
  break;
168
139
  }
169
-
170
140
  _context2.prev = 6;
171
141
  _context2.next = 9;
172
142
  return channelObject.deleteMessage(message);
173
-
174
143
  case 9:
175
144
  _context2.next = 18;
176
145
  break;
177
-
178
146
  case 11:
179
147
  _context2.prev = 11;
180
148
  _context2.t0 = _context2["catch"](6);
@@ -183,18 +151,14 @@ function messageToolbar(message, messageRow, userContext, channelObject) {
183
151
  alert(msg);
184
152
  area = userContext.statusArea || messageRow.parentNode;
185
153
  area.appendChild(widgets.errorMessageBlock(dom, msg));
186
-
187
154
  case 18:
188
155
  messageRow.parentNode.removeChild(messageRow);
189
156
  _context2.next = 22;
190
157
  break;
191
-
192
158
  case 21:
193
159
  alert('You can\'t delete the message, you are not logged in as the author, ' + author);
194
-
195
160
  case 22:
196
161
  closeToolbar();
197
-
198
162
  case 23:
199
163
  case "end":
200
164
  return _context2.stop();
@@ -204,12 +168,9 @@ function messageToolbar(message, messageRow, userContext, channelObject) {
204
168
  }));
205
169
  return _deleteMessage.apply(this, arguments);
206
170
  }
207
-
208
171
  function editMessage(_x) {
209
172
  return _editMessage.apply(this, arguments);
210
173
  } // alain TODO allow chat owner to fully delete message + sentiments and replacing messages
211
-
212
-
213
174
  function _editMessage() {
214
175
  _editMessage = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3(messageRow) {
215
176
  return _regenerator["default"].wrap(function _callee3$(_context3) {
@@ -218,10 +179,8 @@ function messageToolbar(message, messageRow, userContext, channelObject) {
218
179
  case 0:
219
180
  if (me.value === _solidLogic.store.any(message, ns.foaf('maker')).value) {
220
181
  closeToolbar(); // edit is a one-off action
221
-
222
182
  (0, _message.switchToEditor)(messageRow, message, channelObject, userContext);
223
183
  }
224
-
225
184
  case 1:
226
185
  case "end":
227
186
  return _context3.stop();
@@ -231,20 +190,15 @@ function messageToolbar(message, messageRow, userContext, channelObject) {
231
190
  }));
232
191
  return _editMessage.apply(this, arguments);
233
192
  }
234
-
235
- var div = dom.createElement('div'); // is message deleted ?
236
-
193
+ var div = dom.createElement('div');
194
+ // is message deleted ?
237
195
  if ((0, _chatLogic.mostRecentVersion)(message).value === ns.schema('dateDeleted').value) return div;
238
-
239
196
  function closeToolbar() {
240
197
  div.parentElement.parentElement.removeChild(div.parentElement); // remive the TR
241
198
  }
242
-
243
199
  function deleteThingThen(_x2) {
244
200
  return _deleteThingThen.apply(this, arguments);
245
201
  } // Things only the original author can do
246
-
247
-
248
202
  function _deleteThingThen() {
249
203
  _deleteThingThen = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4(x) {
250
204
  return _regenerator["default"].wrap(function _callee4$(_context4) {
@@ -253,7 +207,6 @@ function messageToolbar(message, messageRow, userContext, channelObject) {
253
207
  case 0:
254
208
  _context4.next = 2;
255
209
  return _solidLogic.store.updater.update(_solidLogic.store.connectedStatements(x), []);
256
-
257
210
  case 2:
258
211
  case "end":
259
212
  return _context4.stop();
@@ -263,20 +216,16 @@ function messageToolbar(message, messageRow, userContext, channelObject) {
263
216
  }));
264
217
  return _deleteThingThen.apply(this, arguments);
265
218
  }
266
-
267
219
  var me = _solidLogic.authn.currentUser(); // If already logged on
268
-
269
-
270
220
  if (me && _solidLogic.store.holds(message, ns.foaf('maker'), me)) {
271
221
  // button to delete the message
272
- div.appendChild(widgets.deleteButtonWithCheck(dom, div, 'message', deleteMessage)); // button to edit the message
273
-
222
+ div.appendChild(widgets.deleteButtonWithCheck(dom, div, 'message', deleteMessage));
223
+ // button to edit the message
274
224
  div.appendChild(widgets.button(dom, _iconBase.icons.iconBase + PENCIL_ICON, 'edit', function () {
275
225
  return editMessage(messageRow);
276
226
  }));
277
227
  } // if mine
278
228
  // Things anyone can do if they have a bookmark list async
279
-
280
229
  /*
281
230
  var bookmarkButton = await bookmarks.renderBookmarksButton(userContext)
282
231
  if (bookmarkButton) {
@@ -285,10 +234,10 @@ function messageToolbar(message, messageRow, userContext, channelObject) {
285
234
  */
286
235
  // Things anyone can do if they have a bookmark list
287
236
 
288
-
289
237
  (0, _bookmarks.renderBookmarksButton)(userContext).then(function (bookmarkButton) {
290
238
  if (bookmarkButton) div.appendChild(bookmarkButton);
291
239
  });
240
+
292
241
  /** Button to allow user to express a sentiment (like, endorse, etc) about a target
293
242
  *
294
243
  * @param context {Object} - Provide dom and me
@@ -298,12 +247,10 @@ function messageToolbar(message, messageRow, userContext, channelObject) {
298
247
  * @param doc - {NamedNode} - the Solid document iunto which the data should be written
299
248
  * @param mutuallyExclusive {Array<NamedNode>} - Any RDF classes of sentimentswhich are mutiually exclusive
300
249
  */
301
-
302
250
  function sentimentButton(context, target, icon, actionClass, doc, mutuallyExclusive) {
303
251
  function setColor() {
304
252
  button.style.backgroundColor = action ? 'yellow' : 'white';
305
253
  }
306
-
307
254
  var button = widgets.button(dom, icon, utils.label(actionClass), /*#__PURE__*/function () {
308
255
  var _ref = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(_event) {
309
256
  var insertMe, dirty, i, a;
@@ -315,66 +262,52 @@ function messageToolbar(message, messageRow, userContext, channelObject) {
315
262
  _context.next = 7;
316
263
  break;
317
264
  }
318
-
319
265
  _context.next = 3;
320
266
  return deleteThingThen(action);
321
-
322
267
  case 3:
323
268
  action = null;
324
269
  setColor();
325
270
  _context.next = 25;
326
271
  break;
327
-
328
272
  case 7:
329
273
  // no action
330
274
  action = widgets.newThing(doc);
331
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)];
332
276
  _context.next = 11;
333
277
  return _solidLogic.store.updater.update([], insertMe);
334
-
335
278
  case 11:
336
279
  setColor();
337
-
338
280
  if (!mutuallyExclusive) {
339
281
  _context.next = 25;
340
282
  break;
341
283
  }
342
-
343
284
  // Delete incompative sentiments
344
285
  dirty = false;
345
286
  i = 0;
346
-
347
287
  case 15:
348
288
  if (!(i < mutuallyExclusive.length)) {
349
289
  _context.next = 24;
350
290
  break;
351
291
  }
352
-
353
292
  a = existingAction(mutuallyExclusive[i]);
354
-
355
293
  if (!a) {
356
294
  _context.next = 21;
357
295
  break;
358
296
  }
359
-
360
297
  _context.next = 20;
361
298
  return deleteThingThen(a);
362
-
363
299
  case 20:
364
300
  // but how refresh? refreshTree the parent?
365
301
  dirty = true;
366
-
367
302
  case 21:
368
303
  i++;
369
304
  _context.next = 15;
370
305
  break;
371
-
372
306
  case 24:
373
307
  if (dirty) {
374
308
  // widgets.refreshTree(button.parentNode) // requires them all to be immediate siblings
375
309
  widgets.refreshTree(messageRow); // requires them all to be immediate siblings
376
310
  }
377
-
378
311
  case 25:
379
312
  case "end":
380
313
  return _context.stop();
@@ -382,36 +315,30 @@ function messageToolbar(message, messageRow, userContext, channelObject) {
382
315
  }
383
316
  }, _callee);
384
317
  }));
385
-
386
318
  return function (_x3) {
387
319
  return _ref.apply(this, arguments);
388
320
  };
389
321
  }());
390
-
391
322
  function existingAction(actionClass) {
392
323
  var actions = _solidLogic.store.each(null, ns.schema('agent'), context.me, doc).filter(function (x) {
393
324
  return _solidLogic.store.holds(x, ns.rdf('type'), actionClass, doc);
394
325
  }).filter(function (x) {
395
326
  return _solidLogic.store.holds(x, ns.schema('target'), target, doc);
396
327
  });
397
-
398
328
  return actions.length ? actions[0] : null;
399
329
  }
400
-
401
330
  function refresh() {
402
331
  action = existingAction(actionClass);
403
332
  setColor();
404
333
  }
405
-
406
334
  var action;
407
335
  button.refresh = refresh; // If the file changes, refresh live
408
-
409
336
  refresh();
410
337
  return button;
411
- } // THUMBS_UP_ICON
412
- // https://schema.org/AgreeAction
413
-
338
+ }
414
339
 
340
+ // THUMBS_UP_ICON
341
+ // https://schema.org/AgreeAction
415
342
  me = _solidLogic.authn.currentUser(); // If already logged on
416
343
  // debug.log('Actions 3' + mostRecentVersion(message).value + ' ' + ns.schema('dateDeleted').value + ' ' + (mostRecentVersion(message).value !== ns.schema('dateDeleted').value))
417
344
 
@@ -421,13 +348,13 @@ function messageToolbar(message, messageRow, userContext, channelObject) {
421
348
  dom: dom,
422
349
  div: div
423
350
  };
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
426
-
351
+ div.appendChild(sentimentButton(context1, message,
352
+ // @@ TODO use widgets.sentimentButton
353
+ _iconBase.icons.iconBase + THUMBS_UP_ICON, ns.schema('AgreeAction'), message.doc(), [ns.schema('DisagreeAction')]));
354
+ // Thumbs down
427
355
  div.appendChild(sentimentButton(context1, message, _iconBase.icons.iconBase + THUMBS_DOWN_ICON, ns.schema('DisagreeAction'), message.doc(), [ns.schema('AgreeAction')]));
428
- } // X button to remove the tool UI itself
429
-
430
-
356
+ }
357
+ // X button to remove the tool UI itself
431
358
  var cancelButton = div.appendChild(widgets.cancelButton(dom));
432
359
  cancelButton.style["float"] = 'right';
433
360
  cancelButton.firstChild.style.opacity = '0.3';