solid-ui 2.4.15 → 2.4.16-9d83fb17

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.
@@ -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'\n\nimport { messageToolbar, sentimentStripLinked } from './messageTools'\nimport { findBookmarkDocument } from './bookmarks'\nimport { mostRecentVersion, originalVersion } from './chatLogic'\n\nimport * as debug from '../debug'\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'\n// import * 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\n// const UI = { authn, icons, ns, media, pad, rdf, store, style, utils, widgets }\n\nconst dom = window.document\n\n// const store = store\n\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,28 @@ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/
17
17
 
18
18
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
19
19
 
20
+ var debug = _interopRequireWildcard(require("../debug"));
21
+
20
22
  var _index = require("../authn/index");
21
23
 
22
24
  var _iconBase = require("../iconBase");
23
25
 
24
26
  var _logic = require("../logic");
25
27
 
26
- var _index2 = require("../media/index");
27
-
28
28
  var ns = _interopRequireWildcard(require("../ns"));
29
29
 
30
- var pad = _interopRequireWildcard(require("../pad"));
31
-
32
30
  var rdf = _interopRequireWildcard(require("rdflib"));
33
31
 
34
- var style = _interopRequireWildcard(require("../style"));
35
-
36
32
  var utils = _interopRequireWildcard(require("../utils"));
37
33
 
38
34
  var widgets = _interopRequireWildcard(require("../widgets"));
39
35
 
40
36
  var _bookmarks = require("./bookmarks");
41
37
 
38
+ var _chatLogic = require("./chatLogic");
39
+
40
+ var _message = require("./message");
41
+
42
42
  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
43
 
44
44
  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 +52,29 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
52
52
  * If you made it originally: edit, delete, attach
53
53
  * @packageDocumentation
54
54
  */
55
-
56
- /* global $rdf */
55
+ // import { media } from '../media/index'
56
+ // import * as pad from '../pad'
57
57
  // 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
58
+ // import * as style from '../style'
59
+ // import { infiniteMessageArea } from './infinite.js'
60
+ // import { renderMessage, creatorAndDate } from './message'
61
+ // import * as debug from '../debug'
62
+ var dom = window.document; // THE UNUSED ICONS are here as reminders for possible future functionality
73
63
  // const BOOKMARK_ICON = 'noun_45961.svg'
74
64
  // const HEART_ICON = 'noun_130259.svg' -> Add this to my (private) favorites
75
65
  // const MENU_ICON = 'noun_897914.svg'
76
66
  // const PAPERCLIP_ICON = 'noun_25830.svg' -> add attachments to this message
77
67
  // const PIN_ICON = 'noun_562340.svg' -> pin this message permanently in the chat UI
78
- // const PENCIL_ICON = 'noun_253504.svg'
68
+
69
+ var PENCIL_ICON = 'noun_253504.svg'; // edit a message
79
70
  // const SPANNER_ICON = 'noun_344563.svg' -> settings
80
71
 
81
72
  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
- }
73
+ var THUMBS_DOWN_ICON = 'noun_1384135.svg';
96
74
  /**
97
75
  * Emoji in Unicode
98
76
  */
99
77
 
100
-
101
78
  var emoji = {};
102
79
  emoji[ns.schema('AgreeAction')] = '👍';
103
80
  emoji[ns.schema('DisagreeAction')] = '👎';
@@ -108,9 +85,11 @@ emoji[ns.schema('LikeAction')] = '❤️';
108
85
  */
109
86
 
110
87
  function sentimentStrip(target, doc) {
111
- var actions = kb.each(null, ns.schema('target'), target, doc);
88
+ // alain seems not used
89
+ var latest = (0, _chatLogic.mostRecentVersion)(target);
90
+ var actions = _logic.store.holds(latest, ns.schema('dateDeleted').value, null, latest.doc()) ? _logic.store.each(null, ns.schema('target'), target, doc) : [];
112
91
  var sentiments = actions.map(function (a) {
113
- return kb.any(a, ns.rdf('type'), null, doc);
92
+ return _logic.store.any(a, ns.rdf('type'), null, doc);
114
93
  });
115
94
  sentiments.sort();
116
95
  var strings = sentiments.map(function (x) {
@@ -131,9 +110,9 @@ function sentimentStripLinked(target, doc) {
131
110
 
132
111
  function refresh() {
133
112
  strip.innerHTML = '';
134
- var actions = kb.each(null, ns.schema('target'), target, doc);
113
+ var actions = (0, _chatLogic.mostRecentVersion)(target).uri !== ns.schema('dateDeleted').uri ? _logic.store.each(null, ns.schema('target'), target, doc) : [];
135
114
  var sentiments = actions.map(function (a) {
136
- return [kb.any(a, ns.rdf('type'), null, doc), kb.any(a, ns.schema('agent'), null, doc)];
115
+ return [_logic.store.any(a, ns.rdf('type'), null, doc), _logic.store.any(a, ns.schema('agent'), null, doc)];
137
116
  });
138
117
  sentiments.sort();
139
118
  sentiments.forEach(function (ss) {
@@ -164,60 +143,142 @@ function sentimentStripLinked(target, doc) {
164
143
  */
165
144
 
166
145
 
167
- function messageToolbar(message, messageRow, userContext) {
168
- var div = dom.createElement('div');
146
+ function messageToolbar(message, messageRow, userContext, channelObject) {
147
+ function deleteMessage() {
148
+ return _deleteMessage.apply(this, arguments);
149
+ }
169
150
 
170
- function closeToolbar() {
171
- div.parentElement.parentElement.removeChild(div.parentElement); // remive the TR
151
+ function _deleteMessage() {
152
+ _deleteMessage = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2() {
153
+ var author, msg, area;
154
+ return _regenerator["default"].wrap(function _callee2$(_context2) {
155
+ while (1) {
156
+ switch (_context2.prev = _context2.next) {
157
+ case 0:
158
+ author = _logic.store.any(message, ns.foaf('maker'));
159
+
160
+ if (me) {
161
+ _context2.next = 5;
162
+ break;
163
+ }
164
+
165
+ alert('You can\'t delete the message, you are not logged in.');
166
+ _context2.next = 22;
167
+ break;
168
+
169
+ case 5:
170
+ if (!me.sameTerm(author)) {
171
+ _context2.next = 21;
172
+ break;
173
+ }
174
+
175
+ _context2.prev = 6;
176
+ _context2.next = 9;
177
+ return channelObject.deleteMessage(message);
178
+
179
+ case 9:
180
+ _context2.next = 18;
181
+ break;
182
+
183
+ case 11:
184
+ _context2.prev = 11;
185
+ _context2.t0 = _context2["catch"](6);
186
+ msg = 'Error deleting messaage ' + _context2.t0;
187
+ debug.warn(msg);
188
+ alert(msg);
189
+ area = userContext.statusArea || messageRow.parentNode;
190
+ area.appendChild(widgets.errorMessageBlock(dom, msg));
191
+
192
+ case 18:
193
+ messageRow.parentNode.removeChild(messageRow);
194
+ _context2.next = 22;
195
+ break;
196
+
197
+ case 21:
198
+ alert('You can\'t delete the message, you are not logged in as the author, ' + author);
199
+
200
+ case 22:
201
+ closeToolbar();
202
+
203
+ case 23:
204
+ case "end":
205
+ return _context2.stop();
206
+ }
207
+ }
208
+ }, _callee2, null, [[6, 11]]);
209
+ }));
210
+ return _deleteMessage.apply(this, arguments);
172
211
  }
173
212
 
174
- function deleteThingThen(_x) {
175
- return _deleteThingThen.apply(this, arguments);
176
- } // Things only the original author can do
213
+ function editMessage(_x) {
214
+ return _editMessage.apply(this, arguments);
215
+ } // alain TODO allow chat owner to fully delete message + sentiments and replacing messages
177
216
 
178
217
 
179
- function _deleteThingThen() {
180
- _deleteThingThen = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3(x) {
218
+ function _editMessage() {
219
+ _editMessage = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3(messageRow) {
181
220
  return _regenerator["default"].wrap(function _callee3$(_context3) {
182
221
  while (1) {
183
222
  switch (_context3.prev = _context3.next) {
184
223
  case 0:
185
- _context3.next = 2;
186
- return updatePromise(kb.connectedStatements(x), []);
224
+ if (me.value === _logic.store.any(message, ns.foaf('maker')).value) {
225
+ closeToolbar(); // edit is a one-off action
187
226
 
188
- case 2:
227
+ (0, _message.switchToEditor)(messageRow, message, channelObject, userContext);
228
+ }
229
+
230
+ case 1:
189
231
  case "end":
190
232
  return _context3.stop();
191
233
  }
192
234
  }
193
235
  }, _callee3);
194
236
  }));
195
- return _deleteThingThen.apply(this, arguments);
237
+ return _editMessage.apply(this, arguments);
196
238
  }
197
239
 
198
- var me = UI.authn.currentUser(); // If already logged on
240
+ var div = dom.createElement('div'); // is message deleted ?
199
241
 
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) {
242
+ if ((0, _chatLogic.mostRecentVersion)(message).value === ns.schema('dateDeleted').value) return div;
243
+
244
+ function closeToolbar() {
245
+ div.parentElement.parentElement.removeChild(div.parentElement); // remive the TR
246
+ }
247
+
248
+ function deleteThingThen(_x2) {
249
+ return _deleteThingThen.apply(this, arguments);
250
+ } // Things only the original author can do
251
+
252
+
253
+ function _deleteThingThen() {
254
+ _deleteThingThen = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4(x) {
255
+ return _regenerator["default"].wrap(function _callee4$(_context4) {
204
256
  while (1) {
205
- switch (_context.prev = _context.next) {
257
+ switch (_context4.prev = _context4.next) {
206
258
  case 0:
207
- _context.next = 2;
208
- return kb.updater.update(kb.connectedStatements[message], []);
259
+ _context4.next = 2;
260
+ return _logic.store.updater.update(_logic.store.connectedStatements(x), []);
209
261
 
210
262
  case 2:
211
- closeToolbar();
212
-
213
- case 3:
214
263
  case "end":
215
- return _context.stop();
264
+ return _context4.stop();
216
265
  }
217
266
  }
218
- }, _callee);
219
- })));
220
- div.appendChild(deleteButton);
267
+ }, _callee4);
268
+ }));
269
+ return _deleteThingThen.apply(this, arguments);
270
+ }
271
+
272
+ var me = _index.authn.currentUser(); // If already logged on
273
+
274
+
275
+ if (me && _logic.store.holds(message, ns.foaf('maker'), me)) {
276
+ // button to delete the message
277
+ div.appendChild(widgets.deleteButtonWithCheck(dom, div, 'message', deleteMessage)); // button to edit the message
278
+
279
+ div.appendChild(widgets.button(dom, _iconBase.icons.iconBase + PENCIL_ICON, 'edit', function () {
280
+ return editMessage(messageRow);
281
+ }));
221
282
  } // if mine
222
283
  // Things anyone can do if they have a bookmark list async
223
284
 
@@ -248,39 +309,39 @@ function messageToolbar(message, messageRow, userContext) {
248
309
  button.style.backgroundColor = action ? 'yellow' : 'white';
249
310
  }
250
311
 
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) {
312
+ var button = widgets.button(dom, icon, utils.label(actionClass), /*#__PURE__*/function () {
313
+ var _ref = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(_event) {
253
314
  var insertMe, dirty, i, a;
254
- return _regenerator["default"].wrap(function _callee2$(_context2) {
315
+ return _regenerator["default"].wrap(function _callee$(_context) {
255
316
  while (1) {
256
- switch (_context2.prev = _context2.next) {
317
+ switch (_context.prev = _context.next) {
257
318
  case 0:
258
319
  if (!action) {
259
- _context2.next = 7;
320
+ _context.next = 7;
260
321
  break;
261
322
  }
262
323
 
263
- _context2.next = 3;
324
+ _context.next = 3;
264
325
  return deleteThingThen(action);
265
326
 
266
327
  case 3:
267
328
  action = null;
268
329
  setColor();
269
- _context2.next = 25;
330
+ _context.next = 25;
270
331
  break;
271
332
 
272
333
  case 7:
273
334
  // 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);
335
+ action = widgets.newThing(doc);
336
+ 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)];
337
+ _context.next = 11;
338
+ return _logic.store.updater.update([], insertMe);
278
339
 
279
340
  case 11:
280
341
  setColor();
281
342
 
282
343
  if (!mutuallyExclusive) {
283
- _context2.next = 25;
344
+ _context.next = 25;
284
345
  break;
285
346
  }
286
347
 
@@ -290,18 +351,18 @@ function messageToolbar(message, messageRow, userContext) {
290
351
 
291
352
  case 15:
292
353
  if (!(i < mutuallyExclusive.length)) {
293
- _context2.next = 24;
354
+ _context.next = 24;
294
355
  break;
295
356
  }
296
357
 
297
358
  a = existingAction(mutuallyExclusive[i]);
298
359
 
299
360
  if (!a) {
300
- _context2.next = 21;
361
+ _context.next = 21;
301
362
  break;
302
363
  }
303
364
 
304
- _context2.next = 20;
365
+ _context.next = 20;
305
366
  return deleteThingThen(a);
306
367
 
307
368
  case 20:
@@ -310,34 +371,35 @@ function messageToolbar(message, messageRow, userContext) {
310
371
 
311
372
  case 21:
312
373
  i++;
313
- _context2.next = 15;
374
+ _context.next = 15;
314
375
  break;
315
376
 
316
377
  case 24:
317
378
  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
379
+ // widgets.refreshTree(button.parentNode) // requires them all to be immediate siblings
380
+ widgets.refreshTree(messageRow); // requires them all to be immediate siblings
320
381
  }
321
382
 
322
383
  case 25:
323
384
  case "end":
324
- return _context2.stop();
385
+ return _context.stop();
325
386
  }
326
387
  }
327
- }, _callee2);
388
+ }, _callee);
328
389
  }));
329
390
 
330
- return function (_x2) {
331
- return _ref2.apply(this, arguments);
391
+ return function (_x3) {
392
+ return _ref.apply(this, arguments);
332
393
  };
333
394
  }());
334
395
 
335
396
  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);
397
+ var actions = _logic.store.each(null, ns.schema('agent'), context.me, doc).filter(function (x) {
398
+ return _logic.store.holds(x, ns.rdf('type'), actionClass, doc);
338
399
  }).filter(function (x) {
339
- return kb.holds(x, ns.schema('target'), target, doc);
400
+ return _logic.store.holds(x, ns.schema('target'), target, doc);
340
401
  });
402
+
341
403
  return actions.length ? actions[0] : null;
342
404
  }
343
405
 
@@ -355,23 +417,23 @@ function messageToolbar(message, messageRow, userContext) {
355
417
  // https://schema.org/AgreeAction
356
418
 
357
419
 
358
- me = UI.authn.currentUser(); // If already logged on
420
+ me = _index.authn.currentUser(); // If already logged on
421
+ // debug.log('Actions 3' + mostRecentVersion(message).value + ' ' + ns.schema('dateDeleted').value + ' ' + (mostRecentVersion(message).value !== ns.schema('dateDeleted').value))
359
422
 
360
- if (me) {
361
- // Things you mnust be logged in for
423
+ if (me && (0, _chatLogic.mostRecentVersion)(message).value !== ns.schema('dateDeleted').value) {
362
424
  var context1 = {
363
425
  me: me,
364
426
  dom: dom,
365
427
  div: div
366
428
  };
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
429
+ div.appendChild(sentimentButton(context1, message, // @@ TODO use widgets.sentimentButton
430
+ _iconBase.icons.iconBase + THUMBS_UP_ICON, ns.schema('AgreeAction'), message.doc(), [ns.schema('DisagreeAction')])); // Thumbs down
369
431
 
370
- div.appendChild(sentimentButton(context1, message, UI.icons.iconBase + THUMBS_DOWN_ICON, ns.schema('DisagreeAction'), message.doc(), [ns.schema('AgreeAction')]));
432
+ div.appendChild(sentimentButton(context1, message, _iconBase.icons.iconBase + THUMBS_DOWN_ICON, ns.schema('DisagreeAction'), message.doc(), [ns.schema('AgreeAction')]));
371
433
  } // X button to remove the tool UI itself
372
434
 
373
435
 
374
- var cancelButton = div.appendChild(UI.widgets.cancelButton(dom));
436
+ var cancelButton = div.appendChild(widgets.cancelButton(dom));
375
437
  cancelButton.style["float"] = 'right';
376
438
  cancelButton.firstChild.style.opacity = '0.3';
377
439
  cancelButton.addEventListener('click', closeToolbar);