chat-pane 2.4.15 → 2.4.16
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.
- package/dist/chat.bundle.js +10423 -10680
- package/dist/chat.bundle.js.map +1 -1
- package/dist/longChatPane.js +10525 -10792
- package/dist/longChatPane.js.map +1 -1
- package/dist/shortChatPane.js +10520 -10787
- package/dist/shortChatPane.js.map +1 -1
- package/lib/create.js +17 -15
- package/lib/create.js.map +1 -1
- package/lib/index.js +21 -17
- package/lib/index.js.map +1 -1
- package/lib/longChatPane.js +11 -10
- package/lib/longChatPane.js.map +1 -1
- package/lib/shortChatPane.js +3 -1
- package/lib/shortChatPane.js.map +1 -1
- package/package.json +5 -4
- package/src/create.ts +2 -1
- package/src/index.js +14 -13
- package/src/longChatPane.js +7 -7
- package/src/shortChatPane.js +2 -2
package/lib/shortChatPane.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/shortChatPane.js"],"names":["UI","require","ns","module","exports","icon","icons","iconBase","name","audience","solid","label","subject","context","kb","session","store","n","each","wf","length","holds","rdf","meeting","undefined","foaf","mintClass","mintNew","newPaneOptions","updater","me","uri","Error","newInstance","sym","newBase","newChatDoc","doc","add","dc","Date","Promise","resolve","reject","put","statementsMatching","uri2","ok","message","render","dom","complain","color","pre","createElement","setAttribute","div","appendChild","createTextNode","options","messageStore","any","ircLogQuery","query","$rdf","Query","v","vv","map","x","vars","push","variable","pat","chan","list","pred","msg","date","creator","content","messageArea","addDownstreamChangeListener","widgets","refreshTree"],"mappings":"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","sourcesContent":["/* Chat Pane\n **\n ** Plan is to support a finte number of chat graph shapes\n ** and investigate the interop between them.\n */\n/* global $rdf */\n\nconst UI = require('solid-ui')\nconst ns = UI.ns\n\nmodule.exports = {\n icon: UI.icons.iconBase + 'noun_346319.svg',\n\n name: 'chat',\n\n /*\n * As part of the work on merging the existing chat views (aka panes) into one view\n * https://github.com/solid/chat-pane/issues/17\n * we want to dis-incentivize the use of Small Chat until we've gotten the work done\n * by making it difficult to create new data resources that uses the Small Chat view\n * but we still want existing resources to be viewed by the Small Chat view\n */\n audience: [ns.solid('PowerUser')],\n\n /* AN RRSAgent IRC log:\n\n <irc://localhost:6667/&mit>\n a foaf:ChatChannel\n foaf:chatEventList\n [ rdf:_100\n <#T19-10-58>\n rdf:_101\n <#T19-10-58-1>\n rdf:_102\n ..\n <#T19-28-47-1>\n dc:creator\n [ a wn:Person; foaf:nick \"timbl\" ]\n dc:date\n \"2016-03-15T19:28:47Z\"\n dc:description\n \"timbl has joined &mit\"\n a foaf:chatEvent.\n\n */\n\n label: function (subject, context) {\n const kb = context.session.store\n var n = kb.each(subject, ns.wf('message')).length\n if (n > 0) return 'Chat (' + n + ')' // Show how many in hover text\n\n if (kb.holds(subject, ns.rdf('type'), ns.meeting('Chat'))) {\n // subject is the file\n return 'Meeting chat'\n }\n if (kb.holds(undefined, ns.rdf('type'), ns.foaf('ChatChannel'), subject)) {\n // subject is the file\n return 'IRC log' // contains anything of this type\n }\n return null // Suppress pane otherwise\n },\n\n mintClass: ns.meeting('Chat'),\n\n mintNew: function (context, newPaneOptions) {\n const kb = context.session.store\n var updater = kb.updater\n if (newPaneOptions.me && !newPaneOptions.me.uri) {\n throw new Error('chat mintNew: Invalid userid ' + newPaneOptions.me)\n }\n\n var newInstance = (newPaneOptions.newInstance =\n newPaneOptions.newInstance ||\n kb.sym(newPaneOptions.newBase + 'index.ttl#this'))\n var newChatDoc = newInstance.doc()\n\n kb.add(newInstance, ns.rdf('type'), ns.meeting('Chat'), newChatDoc)\n kb.add(newInstance, ns.dc('title'), 'Chat', newChatDoc)\n kb.add(newInstance, ns.dc('created'), new Date(), newChatDoc)\n if (newPaneOptions.me) {\n kb.add(newInstance, ns.dc('author'), newPaneOptions.me, newChatDoc)\n }\n\n return new Promise(function (resolve, reject) {\n updater.put(\n newChatDoc,\n kb.statementsMatching(undefined, undefined, undefined, newChatDoc),\n 'text/turtle',\n function (uri2, ok, message) {\n if (ok) {\n resolve(newPaneOptions)\n } else {\n reject(\n new Error('FAILED to save new tool at: ' + uri2 + ' : ' + message)\n )\n }\n }\n )\n })\n },\n\n render: function (subject, context) {\n const kb = context.session.store\n const dom = context.dom\n var complain = function complain (message, color) {\n var pre = dom.createElement('pre')\n pre.setAttribute('style', 'background-color: ' + color || '#eed' + ';')\n div.appendChild(pre)\n pre.appendChild(dom.createTextNode(message))\n }\n\n var div = dom.createElement('div')\n div.setAttribute('class', 'chatPane')\n const options = {} // Like newestFirst\n var messageStore\n if (kb.holds(subject, ns.rdf('type'), ns.meeting('Chat'))) {\n // subject may be the file\n messageStore = subject.doc()\n } else if (kb.any(subject, UI.ns.wf('message'))) {\n messageStore = UI.store.any(subject, UI.ns.wf('message')).doc()\n } else if (\n kb.holds(undefined, ns.rdf('type'), ns.foaf('ChatChannel'), subject) ||\n kb.holds(subject, ns.rdf('type'), ns.foaf('ChatChannel'))\n ) {\n // subject is the file\n var ircLogQuery = function () {\n var query = new $rdf.Query('IRC log entries')\n var v = []\n var vv = ['chan', 'msg', 'date', 'list', 'pred', 'creator', 'content']\n vv.map(function (x) {\n query.vars.push((v[x] = $rdf.variable(x)))\n })\n query.pat.add(v.chan, ns.foaf('chatEventList'), v.list) // chatEventList\n query.pat.add(v.list, v.pred, v.msg) //\n query.pat.add(v.msg, ns.dc('date'), v.date)\n query.pat.add(v.msg, ns.dc('creator'), v.creator)\n query.pat.add(v.msg, ns.dc('description'), v.content)\n return query\n }\n messageStore = subject.doc()\n options.query = ircLogQuery()\n } else {\n complain('Unknown chat type')\n }\n\n // var context = {dom, div}\n // UI.authn.logIn(context).then( context => { // The widget itself sees to login\n\n div.appendChild(UI.messageArea(dom, kb, subject, messageStore, options))\n kb.updater.addDownstreamChangeListener(messageStore, function () {\n UI.widgets.refreshTree(div)\n }) // Live update\n // })\n\n return div\n }\n}\n"],"file":"shortChatPane.js"}
|
|
1
|
+
{"version":3,"sources":["../src/shortChatPane.js"],"names":["UI","require","ns","module","exports","icon","icons","iconBase","name","audience","solid","label","subject","context","kb","session","store","n","each","wf","length","holds","rdf","meeting","undefined","foaf","mintClass","mintNew","newPaneOptions","updater","me","uri","Error","newInstance","sym","newBase","newChatDoc","doc","add","dc","Date","Promise","resolve","reject","put","statementsMatching","uri2","ok","message","render","dom","complain","color","pre","createElement","setAttribute","div","appendChild","createTextNode","options","messageStore","any","ircLogQuery","query","$rdf","Query","v","vv","map","x","vars","push","variable","pat","chan","list","pred","msg","date","creator","content","messageArea","addDownstreamChangeListener","widgets","refreshTree"],"mappings":";;AAMA;;AANA;AACA;AACA;AACA;AACA;;AACA;AAEA,IAAMA,EAAE,GAAGC,OAAO,CAAC,UAAD,CAAlB;;AACA,IAAMC,EAAE,GAAGF,EAAE,CAACE,EAAd;AAEAC,MAAM,CAACC,OAAP,GAAiB;AACfC,EAAAA,IAAI,EAAEL,EAAE,CAACM,KAAH,CAASC,QAAT,GAAoB,iBADX;AAGfC,EAAAA,IAAI,EAAE,MAHS;;AAKf;AACF;AACA;AACA;AACA;AACA;AACA;AACEC,EAAAA,QAAQ,EAAE,CAACP,EAAE,CAACQ,KAAH,CAAS,WAAT,CAAD,CAZK;;AAcf;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIEC,EAAAA,KAAK,EAAE,eAAUC,OAAV,EAAmBC,OAAnB,EAA4B;AACjC,QAAMC,EAAE,GAAGD,OAAO,CAACE,OAAR,CAAgBC,KAA3B;AACA,QAAIC,CAAC,GAAGH,EAAE,CAACI,IAAH,CAAQN,OAAR,EAAiBV,EAAE,CAACiB,EAAH,CAAM,SAAN,CAAjB,EAAmCC,MAA3C;AACA,QAAIH,CAAC,GAAG,CAAR,EAAW,OAAO,WAAWA,CAAX,GAAe,GAAtB,CAHsB,CAGI;;AAErC,QAAIH,EAAE,CAACO,KAAH,CAAST,OAAT,EAAkBV,EAAE,CAACoB,GAAH,CAAO,MAAP,CAAlB,EAAkCpB,EAAE,CAACqB,OAAH,CAAW,MAAX,CAAlC,CAAJ,EAA2D;AACzD;AACA,aAAO,cAAP;AACD;;AACD,QAAIT,EAAE,CAACO,KAAH,CAASG,SAAT,EAAoBtB,EAAE,CAACoB,GAAH,CAAO,MAAP,CAApB,EAAoCpB,EAAE,CAACuB,IAAH,CAAQ,aAAR,CAApC,EAA4Db,OAA5D,CAAJ,EAA0E;AACxE;AACA,aAAO,SAAP,CAFwE,CAEvD;AAClB;;AACD,WAAO,IAAP,CAbiC,CAarB;AACb,GAlDc;AAoDfc,EAAAA,SAAS,EAAExB,EAAE,CAACqB,OAAH,CAAW,MAAX,CApDI;AAsDfI,EAAAA,OAAO,EAAE,iBAAUd,OAAV,EAAmBe,cAAnB,EAAmC;AAC1C,QAAMd,EAAE,GAAGD,OAAO,CAACE,OAAR,CAAgBC,KAA3B;AACA,QAAIa,OAAO,GAAGf,EAAE,CAACe,OAAjB;;AACA,QAAID,cAAc,CAACE,EAAf,IAAqB,CAACF,cAAc,CAACE,EAAf,CAAkBC,GAA5C,EAAiD;AAC/C,YAAM,IAAIC,KAAJ,CAAU,mCAAmCJ,cAAc,CAACE,EAA5D,CAAN;AACD;;AAED,QAAIG,WAAW,GAAIL,cAAc,CAACK,WAAf,GACjBL,cAAc,CAACK,WAAf,IACAnB,EAAE,CAACoB,GAAH,CAAON,cAAc,CAACO,OAAf,GAAyB,gBAAhC,CAFF;AAGA,QAAIC,UAAU,GAAGH,WAAW,CAACI,GAAZ,EAAjB;AAEAvB,IAAAA,EAAE,CAACwB,GAAH,CAAOL,WAAP,EAAoB/B,EAAE,CAACoB,GAAH,CAAO,MAAP,CAApB,EAAoCpB,EAAE,CAACqB,OAAH,CAAW,MAAX,CAApC,EAAwDa,UAAxD;AACAtB,IAAAA,EAAE,CAACwB,GAAH,CAAOL,WAAP,EAAoB/B,EAAE,CAACqC,EAAH,CAAM,OAAN,CAApB,EAAoC,MAApC,EAA4CH,UAA5C;AACAtB,IAAAA,EAAE,CAACwB,GAAH,CAAOL,WAAP,EAAoB/B,EAAE,CAACqC,EAAH,CAAM,SAAN,CAApB,EAAsC,IAAIC,IAAJ,EAAtC,EAAkDJ,UAAlD;;AACA,QAAIR,cAAc,CAACE,EAAnB,EAAuB;AACrBhB,MAAAA,EAAE,CAACwB,GAAH,CAAOL,WAAP,EAAoB/B,EAAE,CAACqC,EAAH,CAAM,QAAN,CAApB,EAAqCX,cAAc,CAACE,EAApD,EAAwDM,UAAxD;AACD;;AAED,WAAO,IAAIK,OAAJ,CAAY,UAAUC,OAAV,EAAmBC,MAAnB,EAA2B;AAC5Cd,MAAAA,OAAO,CAACe,GAAR,CACER,UADF,EAEEtB,EAAE,CAAC+B,kBAAH,CAAsBrB,SAAtB,EAAiCA,SAAjC,EAA4CA,SAA5C,EAAuDY,UAAvD,CAFF,EAGE,aAHF,EAIE,UAAUU,IAAV,EAAgBC,EAAhB,EAAoBC,OAApB,EAA6B;AAC3B,YAAID,EAAJ,EAAQ;AACNL,UAAAA,OAAO,CAACd,cAAD,CAAP;AACD,SAFD,MAEO;AACLe,UAAAA,MAAM,CACJ,IAAIX,KAAJ,CAAU,iCAAiCc,IAAjC,GAAwC,KAAxC,GAAgDE,OAA1D,CADI,CAAN;AAGD;AACF,OAZH;AAcD,KAfM,CAAP;AAgBD,GAzFc;AA2FfC,EAAAA,MAAM,EAAE,gBAAUrC,OAAV,EAAmBC,OAAnB,EAA4B;AAClC,QAAMC,EAAE,GAAGD,OAAO,CAACE,OAAR,CAAgBC,KAA3B;AACA,QAAMkC,GAAG,GAAGrC,OAAO,CAACqC,GAApB;;AACA,QAAIC,QAAQ,GAAG,SAASA,QAAT,CAAmBH,OAAnB,EAA4BI,KAA5B,EAAmC;AAChD,UAAIC,GAAG,GAAGH,GAAG,CAACI,aAAJ,CAAkB,KAAlB,CAAV;AACAD,MAAAA,GAAG,CAACE,YAAJ,CAAiB,OAAjB,EAA0B,uBAAuBH,KAAvB,IAAgC,SAAS,GAAnE;AACAI,MAAAA,GAAG,CAACC,WAAJ,CAAgBJ,GAAhB;AACAA,MAAAA,GAAG,CAACI,WAAJ,CAAgBP,GAAG,CAACQ,cAAJ,CAAmBV,OAAnB,CAAhB;AACD,KALD;;AAOA,QAAIQ,GAAG,GAAGN,GAAG,CAACI,aAAJ,CAAkB,KAAlB,CAAV;AACAE,IAAAA,GAAG,CAACD,YAAJ,CAAiB,OAAjB,EAA0B,UAA1B;AACA,QAAMI,OAAO,GAAG,EAAhB,CAZkC,CAYf;;AACnB,QAAIC,YAAJ;;AACA,QAAI9C,EAAE,CAACO,KAAH,CAAST,OAAT,EAAkBV,EAAE,CAACoB,GAAH,CAAO,MAAP,CAAlB,EAAkCpB,EAAE,CAACqB,OAAH,CAAW,MAAX,CAAlC,CAAJ,EAA2D;AACzD;AACAqC,MAAAA,YAAY,GAAGhD,OAAO,CAACyB,GAAR,EAAf;AACD,KAHD,MAGO,IAAIvB,EAAE,CAAC+C,GAAH,CAAOjD,OAAP,EAAgBZ,EAAE,CAACE,EAAH,CAAMiB,EAAN,CAAS,SAAT,CAAhB,CAAJ,EAA0C;AAC/CyC,MAAAA,YAAY,GAAG5C,kBAAM6C,GAAN,CAAUjD,OAAV,EAAmBZ,EAAE,CAACE,EAAH,CAAMiB,EAAN,CAAS,SAAT,CAAnB,EAAwCkB,GAAxC,EAAf;AACD,KAFM,MAEA,IACLvB,EAAE,CAACO,KAAH,CAASG,SAAT,EAAoBtB,EAAE,CAACoB,GAAH,CAAO,MAAP,CAApB,EAAoCpB,EAAE,CAACuB,IAAH,CAAQ,aAAR,CAApC,EAA4Db,OAA5D,KACAE,EAAE,CAACO,KAAH,CAAST,OAAT,EAAkBV,EAAE,CAACoB,GAAH,CAAO,MAAP,CAAlB,EAAkCpB,EAAE,CAACuB,IAAH,CAAQ,aAAR,CAAlC,CAFK,EAGL;AACA;AACA,UAAIqC,WAAW,GAAG,SAAdA,WAAc,GAAY;AAC5B,YAAIC,KAAK,GAAG,IAAIC,IAAI,CAACC,KAAT,CAAe,iBAAf,CAAZ;AACA,YAAIC,CAAC,GAAG,EAAR;AACA,YAAIC,EAAE,GAAG,CAAC,MAAD,EAAS,KAAT,EAAgB,MAAhB,EAAwB,MAAxB,EAAgC,MAAhC,EAAwC,SAAxC,EAAmD,SAAnD,CAAT;AACAA,QAAAA,EAAE,CAACC,GAAH,CAAO,UAAUC,CAAV,EAAa;AAClBN,UAAAA,KAAK,CAACO,IAAN,CAAWC,IAAX,CAAiBL,CAAC,CAACG,CAAD,CAAD,GAAOL,IAAI,CAACQ,QAAL,CAAcH,CAAd,CAAxB;AACD,SAFD;AAGAN,QAAAA,KAAK,CAACU,GAAN,CAAUnC,GAAV,CAAc4B,CAAC,CAACQ,IAAhB,EAAsBxE,EAAE,CAACuB,IAAH,CAAQ,eAAR,CAAtB,EAAgDyC,CAAC,CAACS,IAAlD,EAP4B,CAO4B;;AACxDZ,QAAAA,KAAK,CAACU,GAAN,CAAUnC,GAAV,CAAc4B,CAAC,CAACS,IAAhB,EAAsBT,CAAC,CAACU,IAAxB,EAA8BV,CAAC,CAACW,GAAhC,EAR4B,CAQS;;AACrCd,QAAAA,KAAK,CAACU,GAAN,CAAUnC,GAAV,CAAc4B,CAAC,CAACW,GAAhB,EAAqB3E,EAAE,CAACqC,EAAH,CAAM,MAAN,CAArB,EAAoC2B,CAAC,CAACY,IAAtC;AACAf,QAAAA,KAAK,CAACU,GAAN,CAAUnC,GAAV,CAAc4B,CAAC,CAACW,GAAhB,EAAqB3E,EAAE,CAACqC,EAAH,CAAM,SAAN,CAArB,EAAuC2B,CAAC,CAACa,OAAzC;AACAhB,QAAAA,KAAK,CAACU,GAAN,CAAUnC,GAAV,CAAc4B,CAAC,CAACW,GAAhB,EAAqB3E,EAAE,CAACqC,EAAH,CAAM,aAAN,CAArB,EAA2C2B,CAAC,CAACc,OAA7C;AACA,eAAOjB,KAAP;AACD,OAbD;;AAcAH,MAAAA,YAAY,GAAGhD,OAAO,CAACyB,GAAR,EAAf;AACAsB,MAAAA,OAAO,CAACI,KAAR,GAAgBD,WAAW,EAA3B;AACD,KArBM,MAqBA;AACLX,MAAAA,QAAQ,CAAC,mBAAD,CAAR;AACD,KA1CiC,CA4ClC;AACA;;;AAEAK,IAAAA,GAAG,CAACC,WAAJ,CAAgBzD,EAAE,CAACiF,WAAH,CAAe/B,GAAf,EAAoBpC,EAApB,EAAwBF,OAAxB,EAAiCgD,YAAjC,EAA+CD,OAA/C,CAAhB;AACA7C,IAAAA,EAAE,CAACe,OAAH,CAAWqD,2BAAX,CAAuCtB,YAAvC,EAAqD,YAAY;AAC/D5D,MAAAA,EAAE,CAACmF,OAAH,CAAWC,WAAX,CAAuB5B,GAAvB;AACD,KAFD,EAhDkC,CAkD/B;AACH;;AAEA,WAAOA,GAAP;AACD;AAjJc,CAAjB","sourcesContent":["/* Chat Pane\n **\n ** Plan is to support a finte number of chat graph shapes\n ** and investigate the interop between them.\n */\n/* global $rdf */\nimport { store } from 'solid-logic'\nconst UI = require('solid-ui')\nconst ns = UI.ns\n\nmodule.exports = {\n icon: UI.icons.iconBase + 'noun_346319.svg',\n\n name: 'chat',\n\n /*\n * As part of the work on merging the existing chat views (aka panes) into one view\n * https://github.com/solid/chat-pane/issues/17\n * we want to dis-incentivize the use of Small Chat until we've gotten the work done\n * by making it difficult to create new data resources that uses the Small Chat view\n * but we still want existing resources to be viewed by the Small Chat view\n */\n audience: [ns.solid('PowerUser')],\n\n /* AN RRSAgent IRC log:\n\n <irc://localhost:6667/&mit>\n a foaf:ChatChannel\n foaf:chatEventList\n [ rdf:_100\n <#T19-10-58>\n rdf:_101\n <#T19-10-58-1>\n rdf:_102\n ..\n <#T19-28-47-1>\n dc:creator\n [ a wn:Person; foaf:nick \"timbl\" ]\n dc:date\n \"2016-03-15T19:28:47Z\"\n dc:description\n \"timbl has joined &mit\"\n a foaf:chatEvent.\n\n */\n\n label: function (subject, context) {\n const kb = context.session.store\n var n = kb.each(subject, ns.wf('message')).length\n if (n > 0) return 'Chat (' + n + ')' // Show how many in hover text\n\n if (kb.holds(subject, ns.rdf('type'), ns.meeting('Chat'))) {\n // subject is the file\n return 'Meeting chat'\n }\n if (kb.holds(undefined, ns.rdf('type'), ns.foaf('ChatChannel'), subject)) {\n // subject is the file\n return 'IRC log' // contains anything of this type\n }\n return null // Suppress pane otherwise\n },\n\n mintClass: ns.meeting('Chat'),\n\n mintNew: function (context, newPaneOptions) {\n const kb = context.session.store\n var updater = kb.updater\n if (newPaneOptions.me && !newPaneOptions.me.uri) {\n throw new Error('chat mintNew: Invalid userid ' + newPaneOptions.me)\n }\n\n var newInstance = (newPaneOptions.newInstance =\n newPaneOptions.newInstance ||\n kb.sym(newPaneOptions.newBase + 'index.ttl#this'))\n var newChatDoc = newInstance.doc()\n\n kb.add(newInstance, ns.rdf('type'), ns.meeting('Chat'), newChatDoc)\n kb.add(newInstance, ns.dc('title'), 'Chat', newChatDoc)\n kb.add(newInstance, ns.dc('created'), new Date(), newChatDoc)\n if (newPaneOptions.me) {\n kb.add(newInstance, ns.dc('author'), newPaneOptions.me, newChatDoc)\n }\n\n return new Promise(function (resolve, reject) {\n updater.put(\n newChatDoc,\n kb.statementsMatching(undefined, undefined, undefined, newChatDoc),\n 'text/turtle',\n function (uri2, ok, message) {\n if (ok) {\n resolve(newPaneOptions)\n } else {\n reject(\n new Error('FAILED to save new tool at: ' + uri2 + ' : ' + message)\n )\n }\n }\n )\n })\n },\n\n render: function (subject, context) {\n const kb = context.session.store\n const dom = context.dom\n var complain = function complain (message, color) {\n var pre = dom.createElement('pre')\n pre.setAttribute('style', 'background-color: ' + color || '#eed' + ';')\n div.appendChild(pre)\n pre.appendChild(dom.createTextNode(message))\n }\n\n var div = dom.createElement('div')\n div.setAttribute('class', 'chatPane')\n const options = {} // Like newestFirst\n var messageStore\n if (kb.holds(subject, ns.rdf('type'), ns.meeting('Chat'))) {\n // subject may be the file\n messageStore = subject.doc()\n } else if (kb.any(subject, UI.ns.wf('message'))) {\n messageStore = store.any(subject, UI.ns.wf('message')).doc()\n } else if (\n kb.holds(undefined, ns.rdf('type'), ns.foaf('ChatChannel'), subject) ||\n kb.holds(subject, ns.rdf('type'), ns.foaf('ChatChannel'))\n ) {\n // subject is the file\n var ircLogQuery = function () {\n var query = new $rdf.Query('IRC log entries')\n var v = []\n var vv = ['chan', 'msg', 'date', 'list', 'pred', 'creator', 'content']\n vv.map(function (x) {\n query.vars.push((v[x] = $rdf.variable(x)))\n })\n query.pat.add(v.chan, ns.foaf('chatEventList'), v.list) // chatEventList\n query.pat.add(v.list, v.pred, v.msg) //\n query.pat.add(v.msg, ns.dc('date'), v.date)\n query.pat.add(v.msg, ns.dc('creator'), v.creator)\n query.pat.add(v.msg, ns.dc('description'), v.content)\n return query\n }\n messageStore = subject.doc()\n options.query = ircLogQuery()\n } else {\n complain('Unknown chat type')\n }\n\n // var context = {dom, div}\n // UI.authn.logIn(context).then( context => { // The widget itself sees to login\n\n div.appendChild(UI.messageArea(dom, kb, subject, messageStore, options))\n kb.updater.addDownstreamChangeListener(messageStore, function () {\n UI.widgets.refreshTree(div)\n }) // Live update\n // })\n\n return div\n }\n}\n"],"file":"shortChatPane.js"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "chat-pane",
|
|
3
|
-
"version": "2.4.
|
|
3
|
+
"version": "2.4.16",
|
|
4
4
|
"description": "Solid-compatible Panes: Chat",
|
|
5
5
|
"main": "./lib/main.js",
|
|
6
6
|
"files": [
|
|
@@ -12,11 +12,12 @@
|
|
|
12
12
|
"lint": "eslint '*.js'",
|
|
13
13
|
"lint-fix": "eslint '*.js' --fix",
|
|
14
14
|
"test": "npm run lint",
|
|
15
|
+
"clean": "rm -rf lib && rm -rf dist",
|
|
15
16
|
"prepublishOnly": "npm test && npm run build && npm run build-lib",
|
|
16
17
|
"postpublish": "git push origin main --follow-tags",
|
|
17
18
|
"watch": "webpack --watch",
|
|
18
19
|
"start": "webpack-dev-server --open",
|
|
19
|
-
"build": "webpack",
|
|
20
|
+
"build": "webpack && npm run build-lib",
|
|
20
21
|
"build-lib": "babel src -d lib --source-maps --extensions '.ts,.js'"
|
|
21
22
|
},
|
|
22
23
|
"repository": {
|
|
@@ -47,8 +48,8 @@
|
|
|
47
48
|
"buffer": "^6.0.3",
|
|
48
49
|
"crypto-browserify": "^3.12.0",
|
|
49
50
|
"path-browserify": "^1.0.1",
|
|
50
|
-
"
|
|
51
|
-
"solid-ui": "^2.4.
|
|
51
|
+
"solid-logic": "^1.3.14",
|
|
52
|
+
"solid-ui": "^2.4.19",
|
|
52
53
|
"stream-browserify": "^3.0.0"
|
|
53
54
|
},
|
|
54
55
|
"devDependencies": {
|
package/src/create.ts
CHANGED
package/src/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/* global SolidAuthClient */
|
|
2
2
|
|
|
3
|
+
import { store, authn, authSession } from 'solid-logic'
|
|
3
4
|
const ChatPane = require('./longChatPane.js')
|
|
4
5
|
const $rdf = require('rdflib')
|
|
5
6
|
const UI = require('solid-ui')
|
|
@@ -19,13 +20,13 @@ window.followLink = async function (from, follow, multiple) {
|
|
|
19
20
|
const subject = $rdf.sym(from)
|
|
20
21
|
const doc = subject.doc()
|
|
21
22
|
await new Promise((resolve, reject) => {
|
|
22
|
-
|
|
23
|
+
store.fetcher.load(doc).then(resolve, reject)
|
|
23
24
|
})
|
|
24
25
|
const predicate = $rdf.sym(follow)
|
|
25
26
|
if (multiple) {
|
|
26
|
-
return
|
|
27
|
+
return store.each(subject, predicate).map(n => n.value)
|
|
27
28
|
}
|
|
28
|
-
return
|
|
29
|
+
return store.any(subject, predicate).value
|
|
29
30
|
}
|
|
30
31
|
|
|
31
32
|
function toLi (uri) {
|
|
@@ -33,7 +34,7 @@ function toLi (uri) {
|
|
|
33
34
|
}
|
|
34
35
|
|
|
35
36
|
async function getChatsList () {
|
|
36
|
-
const { instances } = await UI.
|
|
37
|
+
const { instances } = await UI.login.findAppInstances({}, $rdf.sym('http://www.w3.org/ns/pim/meeting#LongChat'))
|
|
37
38
|
return `<h2>Your chats:
|
|
38
39
|
<ul>
|
|
39
40
|
${instances.map(n => n.value).map(toLi)}
|
|
@@ -41,7 +42,7 @@ async function getChatsList () {
|
|
|
41
42
|
}
|
|
42
43
|
|
|
43
44
|
window.inviteSomeone = async function () {
|
|
44
|
-
const invitee =
|
|
45
|
+
const invitee = store.namedNode(document.getElementById('invitee').value)
|
|
45
46
|
const created = await getChat(invitee)
|
|
46
47
|
console.log(created)
|
|
47
48
|
renderMenuDiv()
|
|
@@ -78,12 +79,12 @@ async function appendChatPane (dom, uri) {
|
|
|
78
79
|
const doc = subject.doc()
|
|
79
80
|
|
|
80
81
|
await new Promise((resolve, reject) => {
|
|
81
|
-
|
|
82
|
+
store.fetcher.load(doc).then(resolve, reject)
|
|
82
83
|
})
|
|
83
84
|
const context = { // see https://github.com/solid/solid-panes/blob/005f90295d83e499fd626bd84aeb3df10135d5c1/src/index.ts#L30-L34
|
|
84
85
|
dom,
|
|
85
86
|
session: {
|
|
86
|
-
store:
|
|
87
|
+
store: store
|
|
87
88
|
}
|
|
88
89
|
}
|
|
89
90
|
const options = {}
|
|
@@ -100,7 +101,7 @@ document.addEventListener('DOMContentLoaded', function () {
|
|
|
100
101
|
window.onload = () => {
|
|
101
102
|
console.log('document ready')
|
|
102
103
|
const onSessionChange = () => {
|
|
103
|
-
const currentUser =
|
|
104
|
+
const currentUser = authn.currentUser()
|
|
104
105
|
if (!currentUser) {
|
|
105
106
|
console.log('The user is not logged in')
|
|
106
107
|
document.getElementById('loginBanner').innerHTML = '<button onclick="popupLogin()">Log in</button>'
|
|
@@ -116,16 +117,16 @@ window.onload = () => {
|
|
|
116
117
|
appendChatPane(document, uri)
|
|
117
118
|
}
|
|
118
119
|
}
|
|
119
|
-
|
|
120
|
-
|
|
120
|
+
authSession.onLogin(() => onSessionChange())
|
|
121
|
+
authSession.onSessionRestore(() => onSessionChange())
|
|
121
122
|
onSessionChange()
|
|
122
123
|
}
|
|
123
124
|
window.logout = () => {
|
|
124
|
-
|
|
125
|
+
authSession.logout()
|
|
125
126
|
window.location = ''
|
|
126
127
|
}
|
|
127
128
|
window.popupLogin = async function () {
|
|
128
|
-
if (!
|
|
129
|
-
UI.
|
|
129
|
+
if (!authn.currentUser()) {
|
|
130
|
+
UI.login.renderSignInPopup(document)
|
|
130
131
|
}
|
|
131
132
|
}
|
package/src/longChatPane.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
**
|
|
3
3
|
** A long chat consists a of a series of chat files saved by date.
|
|
4
4
|
*/
|
|
5
|
-
|
|
5
|
+
import { authn } from 'solid-logic'
|
|
6
6
|
const UI = require('solid-ui')
|
|
7
7
|
const ns = UI.ns
|
|
8
8
|
const $rdf = require('rdflib')
|
|
@@ -156,9 +156,9 @@ module.exports = {
|
|
|
156
156
|
const registrationArea = menuTable.appendChild(dom.createElement('tr'))
|
|
157
157
|
const statusArea = menuTable.appendChild(dom.createElement('tr'))
|
|
158
158
|
|
|
159
|
-
var me =
|
|
159
|
+
var me = authn.currentUser()
|
|
160
160
|
if (me) {
|
|
161
|
-
await UI.
|
|
161
|
+
await UI.login.registrationControl(
|
|
162
162
|
{ noun, me, statusArea, dom, div: registrationArea },
|
|
163
163
|
chatChannel,
|
|
164
164
|
mainClass
|
|
@@ -217,7 +217,7 @@ module.exports = {
|
|
|
217
217
|
|
|
218
218
|
function renderCreationControl (refreshTarget, noun) {
|
|
219
219
|
var creationDiv = dom.createElement('div')
|
|
220
|
-
var me =
|
|
220
|
+
var me = authn.currentUser()
|
|
221
221
|
var creationContext = {
|
|
222
222
|
// folder: subject,
|
|
223
223
|
div: creationDiv,
|
|
@@ -236,7 +236,7 @@ module.exports = {
|
|
|
236
236
|
async function renderInstances (theClass, noun) {
|
|
237
237
|
const instancesDiv = dom.createElement('div')
|
|
238
238
|
var context = { dom, div: instancesDiv, noun: noun }
|
|
239
|
-
await UI.
|
|
239
|
+
await UI.login.registrationList(context, { public: true, private: true, type: theClass })
|
|
240
240
|
instancesDiv.appendChild(renderCreationControl(instancesDiv, noun))
|
|
241
241
|
return instancesDiv
|
|
242
242
|
}
|
|
@@ -274,7 +274,7 @@ module.exports = {
|
|
|
274
274
|
participantsArea.appendChild(panelCloseButton(participantsArea))
|
|
275
275
|
|
|
276
276
|
// Record my participation and display participants
|
|
277
|
-
var me =
|
|
277
|
+
var me = authn.currentUser()
|
|
278
278
|
if (!me) alert('Should be logeed in for partipants panel')
|
|
279
279
|
UI.pad.manageParticipation(
|
|
280
280
|
dom,
|
|
@@ -367,7 +367,7 @@ module.exports = {
|
|
|
367
367
|
div.setAttribute('class', 'chatPane')
|
|
368
368
|
const options = { infinite: true }
|
|
369
369
|
const participantsHandlerContext = { noun: 'chat room', div, dom: dom }
|
|
370
|
-
participantsHandlerContext.me =
|
|
370
|
+
participantsHandlerContext.me = authn.currentUser() // If already logged on
|
|
371
371
|
|
|
372
372
|
async function buildPane () {
|
|
373
373
|
let prefMap
|
package/src/shortChatPane.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
** and investigate the interop between them.
|
|
5
5
|
*/
|
|
6
6
|
/* global $rdf */
|
|
7
|
-
|
|
7
|
+
import { store } from 'solid-logic'
|
|
8
8
|
const UI = require('solid-ui')
|
|
9
9
|
const ns = UI.ns
|
|
10
10
|
|
|
@@ -117,7 +117,7 @@ module.exports = {
|
|
|
117
117
|
// subject may be the file
|
|
118
118
|
messageStore = subject.doc()
|
|
119
119
|
} else if (kb.any(subject, UI.ns.wf('message'))) {
|
|
120
|
-
messageStore =
|
|
120
|
+
messageStore = store.any(subject, UI.ns.wf('message')).doc()
|
|
121
121
|
} else if (
|
|
122
122
|
kb.holds(undefined, ns.rdf('type'), ns.foaf('ChatChannel'), subject) ||
|
|
123
123
|
kb.holds(subject, ns.rdf('type'), ns.foaf('ChatChannel'))
|