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/create.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
function _typeof(obj) { "@babel/helpers - typeof";
|
|
3
|
+
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
|
4
4
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
@@ -10,6 +10,8 @@ exports.getChat = getChat;
|
|
|
10
10
|
|
|
11
11
|
var _solidUi = require("solid-ui");
|
|
12
12
|
|
|
13
|
+
var _solidLogic = require("solid-logic");
|
|
14
|
+
|
|
13
15
|
var _rdflib = require("rdflib");
|
|
14
16
|
|
|
15
17
|
var _longChatPane = _interopRequireWildcard(require("./longChatPane"));
|
|
@@ -33,7 +35,7 @@ function _getMe() {
|
|
|
33
35
|
while (1) {
|
|
34
36
|
switch (_context.prev = _context.next) {
|
|
35
37
|
case 0:
|
|
36
|
-
me =
|
|
38
|
+
me = _solidLogic.authn.currentUser();
|
|
37
39
|
|
|
38
40
|
if (!(me === null)) {
|
|
39
41
|
_context.next = 3;
|
|
@@ -44,7 +46,7 @@ function _getMe() {
|
|
|
44
46
|
|
|
45
47
|
case 3:
|
|
46
48
|
_context.next = 5;
|
|
47
|
-
return
|
|
49
|
+
return _solidLogic.store.fetcher.load(me.doc());
|
|
48
50
|
|
|
49
51
|
case 5:
|
|
50
52
|
return _context.abrupt("return", me);
|
|
@@ -70,7 +72,7 @@ function _getPodRoot() {
|
|
|
70
72
|
while (1) {
|
|
71
73
|
switch (_context2.prev = _context2.next) {
|
|
72
74
|
case 0:
|
|
73
|
-
podRoot =
|
|
75
|
+
podRoot = _solidLogic.store.any(me, _solidUi.ns.space('storage'), undefined, me.doc());
|
|
74
76
|
|
|
75
77
|
if (podRoot) {
|
|
76
78
|
_context2.next = 3;
|
|
@@ -104,10 +106,10 @@ function _sendInvite() {
|
|
|
104
106
|
switch (_context3.prev = _context3.next) {
|
|
105
107
|
case 0:
|
|
106
108
|
_context3.next = 2;
|
|
107
|
-
return
|
|
109
|
+
return _solidLogic.store.fetcher.load(invitee.doc());
|
|
108
110
|
|
|
109
111
|
case 2:
|
|
110
|
-
inviteeInbox =
|
|
112
|
+
inviteeInbox = _solidLogic.store.any(invitee, _solidUi.ns.ldp('inbox'), undefined, invitee.doc());
|
|
111
113
|
|
|
112
114
|
if (inviteeInbox) {
|
|
113
115
|
_context3.next = 5;
|
|
@@ -119,7 +121,7 @@ function _sendInvite() {
|
|
|
119
121
|
case 5:
|
|
120
122
|
inviteBody = "\n<> a <http://www.w3.org/ns/pim/meeting#LongChatInvite> ;\n".concat(_solidUi.ns.rdf('seeAlso'), " <").concat(chatThing.value, "> . \n ");
|
|
121
123
|
_context3.next = 8;
|
|
122
|
-
return
|
|
124
|
+
return _solidLogic.store.fetcher.webOperation('POST', inviteeInbox.value, {
|
|
123
125
|
data: inviteBody,
|
|
124
126
|
contentType: 'text/turtle'
|
|
125
127
|
});
|
|
@@ -166,7 +168,7 @@ function _createChatThing() {
|
|
|
166
168
|
_context4.next = 2;
|
|
167
169
|
return _longChatPane["default"].mintNew({
|
|
168
170
|
session: {
|
|
169
|
-
store:
|
|
171
|
+
store: _solidLogic.store
|
|
170
172
|
}
|
|
171
173
|
}, {
|
|
172
174
|
me: me,
|
|
@@ -199,11 +201,11 @@ function _setAcl() {
|
|
|
199
201
|
switch (_context5.prev = _context5.next) {
|
|
200
202
|
case 0:
|
|
201
203
|
_context5.next = 2;
|
|
202
|
-
return
|
|
204
|
+
return _solidLogic.store.fetcher.load(chatContainer);
|
|
203
205
|
|
|
204
206
|
case 2:
|
|
205
207
|
// FIXME: check the Why value on this quad:
|
|
206
|
-
chatAclDoc =
|
|
208
|
+
chatAclDoc = _solidLogic.store.any(chatContainer, new _rdflib.NamedNode('http://www.iana.org/assignments/link-relations/acl'));
|
|
207
209
|
|
|
208
210
|
if (chatAclDoc) {
|
|
209
211
|
_context5.next = 5;
|
|
@@ -215,7 +217,7 @@ function _setAcl() {
|
|
|
215
217
|
case 5:
|
|
216
218
|
aclBody = "\n@prefix acl: <http://www.w3.org/ns/auth/acl#>.\n<#owner>\n a acl:Authorization;\n acl:agent <".concat(me.value, ">;\n acl:accessTo <.>;\n acl:default <.>;\n acl:mode\n acl:Read, acl:Write, acl:Control.\n<#invitee>\n a acl:Authorization;\n acl:agent <").concat(invitee.value, ">;\n acl:accessTo <.>;\n acl:default <.>;\n acl:mode\n acl:Read, acl:Append.\n");
|
|
217
219
|
_context5.next = 8;
|
|
218
|
-
return
|
|
220
|
+
return _solidLogic.store.fetcher.webOperation('PUT', chatAclDoc.value, {
|
|
219
221
|
data: aclBody,
|
|
220
222
|
contentType: 'text/turtle'
|
|
221
223
|
});
|
|
@@ -245,7 +247,7 @@ function _addToPrivateTypeIndex() {
|
|
|
245
247
|
switch (_context6.prev = _context6.next) {
|
|
246
248
|
case 0:
|
|
247
249
|
// Add to private type index
|
|
248
|
-
privateTypeIndex =
|
|
250
|
+
privateTypeIndex = _solidLogic.store.any(me, _solidUi.ns.solid('privateTypeIndex'));
|
|
249
251
|
|
|
250
252
|
if (privateTypeIndex) {
|
|
251
253
|
_context6.next = 3;
|
|
@@ -256,14 +258,14 @@ function _addToPrivateTypeIndex() {
|
|
|
256
258
|
|
|
257
259
|
case 3:
|
|
258
260
|
_context6.next = 5;
|
|
259
|
-
return
|
|
261
|
+
return _solidLogic.store.fetcher.load(privateTypeIndex);
|
|
260
262
|
|
|
261
263
|
case 5:
|
|
262
264
|
reg = _solidUi.widgets.newThing(privateTypeIndex);
|
|
263
265
|
ins = [(0, _rdflib.st)(reg, _solidUi.ns.rdf('type'), _solidUi.ns.solid('TypeRegistration'), privateTypeIndex.doc()), (0, _rdflib.st)(reg, _solidUi.ns.solid('forClass'), _solidUi.ns.meeting('LongChat'), privateTypeIndex.doc()), (0, _rdflib.st)(reg, _solidUi.ns.solid('instance'), chatThing, privateTypeIndex.doc())];
|
|
264
266
|
_context6.next = 9;
|
|
265
267
|
return new Promise(function (resolve, reject) {
|
|
266
|
-
|
|
268
|
+
_solidLogic.store.updater.update([], ins, function (_uri, ok, errm) {
|
|
267
269
|
if (!ok) {
|
|
268
270
|
reject(new Error(errm));
|
|
269
271
|
} else {
|
|
@@ -307,7 +309,7 @@ function _findChat() {
|
|
|
307
309
|
exists = true;
|
|
308
310
|
_context7.prev = 8;
|
|
309
311
|
_context7.next = 11;
|
|
310
|
-
return
|
|
312
|
+
return _solidLogic.store.fetcher.load(new _rdflib.NamedNode(chatContainer.value + _longChatPane.CHAT_LOCATION_IN_CONTAINER));
|
|
311
313
|
|
|
312
314
|
case 11:
|
|
313
315
|
_context7.next = 16;
|
package/lib/create.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/create.ts"],"names":["getMe","me","authn","currentUser","Error","store","fetcher","load","doc","getPodRoot","podRoot","any","ns","space","undefined","sendInvite","invitee","chatThing","inviteeInbox","ldp","value","inviteBody","rdf","webOperation","data","contentType","inviteResponse","locationStr","headers","get","status","determineChatContainer","chatContainerStr","URL","host","toString","NamedNode","createChatThing","chatContainer","longChatPane","mintNew","session","newBase","created","newInstance","setAcl","chatAclDoc","aclBody","aclResponse","addToPrivateTypeIndex","privateTypeIndex","solid","reg","widgets","newThing","ins","meeting","Promise","resolve","reject","updater","update","_uri","ok","errm","findChat","exists","CHAT_LOCATION_IN_CONTAINER","getChat","createIfMissing"],"mappings":"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","sourcesContent":["import { authn, store, ns, widgets } from 'solid-ui'\nimport { NamedNode, st } from 'rdflib'\nimport longChatPane, { CHAT_LOCATION_IN_CONTAINER } from './longChatPane'\n\nasync function getMe () {\n const me = authn.currentUser()\n if (me === null) {\n throw new Error('Current user not found! Not logged in?')\n }\n await store.fetcher.load(me.doc())\n return me\n}\n\nasync function getPodRoot (me): Promise<NamedNode> {\n const podRoot = store.any(me, ns.space('storage'), undefined, me.doc())\n if (!podRoot) {\n throw new Error('Current user pod root not found!')\n }\n return podRoot\n}\n\nasync function sendInvite (invitee: NamedNode, chatThing: NamedNode) {\n await store.fetcher.load(invitee.doc())\n const inviteeInbox = store.any(invitee, ns.ldp('inbox'), undefined, invitee.doc())\n if (!inviteeInbox) {\n throw new Error(`Invitee inbox not found! ${invitee.value}`)\n }\n const inviteBody = `\n<> a <http://www.w3.org/ns/pim/meeting#LongChatInvite> ;\n${ns.rdf('seeAlso')} <${chatThing.value}> . \n `\n \n const inviteResponse = await store.fetcher.webOperation('POST', inviteeInbox.value, {\n data: inviteBody,\n contentType: 'text/turtle'\n })\n const locationStr = inviteResponse.headers.get('location')\n if (!locationStr) {\n throw new Error(`Invite sending returned a ${inviteResponse.status}`)\n }\n}\n\nfunction determineChatContainer (invitee, podRoot) {\n // Create chat\n // See https://gitter.im/solid/chat-app?at=5f3c800f855be416a23ae74a\n const chatContainerStr = new URL(`IndividualChats/${new URL(invitee.value).host}/`, podRoot.value).toString()\n return new NamedNode(chatContainerStr)\n}\n\nasync function createChatThing (chatContainer, me) {\n const created = await longChatPane.mintNew({\n session: {\n store\n }\n },\n {\n me,\n newBase: chatContainer.value\n })\n return created.newInstance\n}\n\nasync function setAcl(chatContainer, me, invitee) {\n // Some servers don't present a Link http response header\n // if the container doesn't exist yet, so refetch the container\n // now that it has been created:\n await store.fetcher.load(chatContainer)\n\n // FIXME: check the Why value on this quad:\n const chatAclDoc = store.any(chatContainer, new NamedNode('http://www.iana.org/assignments/link-relations/acl'))\n if (!chatAclDoc) {\n throw new Error('Chat ACL doc not found!')\n }\n\n const aclBody = `\n@prefix acl: <http://www.w3.org/ns/auth/acl#>.\n<#owner>\n a acl:Authorization;\n acl:agent <${me.value}>;\n acl:accessTo <.>;\n acl:default <.>;\n acl:mode\n acl:Read, acl:Write, acl:Control.\n<#invitee>\n a acl:Authorization;\n acl:agent <${invitee.value}>;\n acl:accessTo <.>;\n acl:default <.>;\n acl:mode\n acl:Read, acl:Append.\n`\n const aclResponse = await store.fetcher.webOperation('PUT', chatAclDoc.value, {\n data: aclBody,\n contentType: 'text/turtle'\n })\n}\nasync function addToPrivateTypeIndex(chatThing, me) {\n // Add to private type index\n const privateTypeIndex = store.any(me, ns.solid('privateTypeIndex')) as NamedNode | null\n if (!privateTypeIndex) {\n throw new Error('Private type index not found!')\n }\n await store.fetcher.load(privateTypeIndex)\n const reg = widgets.newThing(privateTypeIndex)\n const ins = [\n st(reg, ns.rdf('type'), ns.solid('TypeRegistration'), privateTypeIndex.doc()),\n st(reg, ns.solid('forClass'), ns.meeting('LongChat'), privateTypeIndex.doc()),\n st(reg, ns.solid('instance'), chatThing, privateTypeIndex.doc())\n ]\n await new Promise((resolve, reject) => {\n store.updater.update([], ins, function (_uri, ok, errm) {\n if (!ok) {\n reject(new Error(errm))\n } else {\n resolve()\n }\n })\n })\n}\n\nexport async function findChat (invitee: NamedNode) {\n const me = await getMe()\n const podRoot = await getPodRoot(me)\n const chatContainer = determineChatContainer(invitee, podRoot)\n let exists = true\n try {\n await store.fetcher.load(new NamedNode(chatContainer.value + CHAT_LOCATION_IN_CONTAINER))\n } catch (e) {\n exists = false\n }\n return { me, chatContainer, exists}\n}\n\nexport async function getChat (invitee: NamedNode, createIfMissing = true): Promise<NamedNode> {\n const { me, chatContainer, exists } = await findChat (invitee)\n if (exists) {\n return new NamedNode(chatContainer.value + CHAT_LOCATION_IN_CONTAINER)\n }\n\n if (createIfMissing) {\n const chatThing = await createChatThing(chatContainer, me)\n await sendInvite(invitee, chatThing)\n await setAcl(chatContainer, me, invitee)\n await addToPrivateTypeIndex(chatThing, me)\n return chatThing\n }\n}\n"],"file":"create.js"}
|
|
1
|
+
{"version":3,"sources":["../src/create.ts"],"names":["getMe","me","authn","currentUser","Error","store","fetcher","load","doc","getPodRoot","podRoot","any","ns","space","undefined","sendInvite","invitee","chatThing","inviteeInbox","ldp","value","inviteBody","rdf","webOperation","data","contentType","inviteResponse","locationStr","headers","get","status","determineChatContainer","chatContainerStr","URL","host","toString","NamedNode","createChatThing","chatContainer","longChatPane","mintNew","session","newBase","created","newInstance","setAcl","chatAclDoc","aclBody","aclResponse","addToPrivateTypeIndex","privateTypeIndex","solid","reg","widgets","newThing","ins","meeting","Promise","resolve","reject","updater","update","_uri","ok","errm","findChat","exists","CHAT_LOCATION_IN_CONTAINER","getChat","createIfMissing"],"mappings":"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","sourcesContent":["import { ns, widgets } from 'solid-ui'\nimport { authn, store } from 'solid-logic'\nimport { NamedNode, st } from 'rdflib'\nimport longChatPane, { CHAT_LOCATION_IN_CONTAINER } from './longChatPane'\n\nasync function getMe () {\n const me = authn.currentUser()\n if (me === null) {\n throw new Error('Current user not found! Not logged in?')\n }\n await store.fetcher.load(me.doc())\n return me\n}\n\nasync function getPodRoot (me): Promise<NamedNode> {\n const podRoot = store.any(me, ns.space('storage'), undefined, me.doc())\n if (!podRoot) {\n throw new Error('Current user pod root not found!')\n }\n return podRoot\n}\n\nasync function sendInvite (invitee: NamedNode, chatThing: NamedNode) {\n await store.fetcher.load(invitee.doc())\n const inviteeInbox = store.any(invitee, ns.ldp('inbox'), undefined, invitee.doc())\n if (!inviteeInbox) {\n throw new Error(`Invitee inbox not found! ${invitee.value}`)\n }\n const inviteBody = `\n<> a <http://www.w3.org/ns/pim/meeting#LongChatInvite> ;\n${ns.rdf('seeAlso')} <${chatThing.value}> . \n `\n \n const inviteResponse = await store.fetcher.webOperation('POST', inviteeInbox.value, {\n data: inviteBody,\n contentType: 'text/turtle'\n })\n const locationStr = inviteResponse.headers.get('location')\n if (!locationStr) {\n throw new Error(`Invite sending returned a ${inviteResponse.status}`)\n }\n}\n\nfunction determineChatContainer (invitee, podRoot) {\n // Create chat\n // See https://gitter.im/solid/chat-app?at=5f3c800f855be416a23ae74a\n const chatContainerStr = new URL(`IndividualChats/${new URL(invitee.value).host}/`, podRoot.value).toString()\n return new NamedNode(chatContainerStr)\n}\n\nasync function createChatThing (chatContainer, me) {\n const created = await longChatPane.mintNew({\n session: {\n store\n }\n },\n {\n me,\n newBase: chatContainer.value\n })\n return created.newInstance\n}\n\nasync function setAcl(chatContainer, me, invitee) {\n // Some servers don't present a Link http response header\n // if the container doesn't exist yet, so refetch the container\n // now that it has been created:\n await store.fetcher.load(chatContainer)\n\n // FIXME: check the Why value on this quad:\n const chatAclDoc = store.any(chatContainer, new NamedNode('http://www.iana.org/assignments/link-relations/acl'))\n if (!chatAclDoc) {\n throw new Error('Chat ACL doc not found!')\n }\n\n const aclBody = `\n@prefix acl: <http://www.w3.org/ns/auth/acl#>.\n<#owner>\n a acl:Authorization;\n acl:agent <${me.value}>;\n acl:accessTo <.>;\n acl:default <.>;\n acl:mode\n acl:Read, acl:Write, acl:Control.\n<#invitee>\n a acl:Authorization;\n acl:agent <${invitee.value}>;\n acl:accessTo <.>;\n acl:default <.>;\n acl:mode\n acl:Read, acl:Append.\n`\n const aclResponse = await store.fetcher.webOperation('PUT', chatAclDoc.value, {\n data: aclBody,\n contentType: 'text/turtle'\n })\n}\nasync function addToPrivateTypeIndex(chatThing, me) {\n // Add to private type index\n const privateTypeIndex = store.any(me, ns.solid('privateTypeIndex')) as NamedNode | null\n if (!privateTypeIndex) {\n throw new Error('Private type index not found!')\n }\n await store.fetcher.load(privateTypeIndex)\n const reg = widgets.newThing(privateTypeIndex)\n const ins = [\n st(reg, ns.rdf('type'), ns.solid('TypeRegistration'), privateTypeIndex.doc()),\n st(reg, ns.solid('forClass'), ns.meeting('LongChat'), privateTypeIndex.doc()),\n st(reg, ns.solid('instance'), chatThing, privateTypeIndex.doc())\n ]\n await new Promise((resolve, reject) => {\n store.updater.update([], ins, function (_uri, ok, errm) {\n if (!ok) {\n reject(new Error(errm))\n } else {\n resolve()\n }\n })\n })\n}\n\nexport async function findChat (invitee: NamedNode) {\n const me = await getMe()\n const podRoot = await getPodRoot(me)\n const chatContainer = determineChatContainer(invitee, podRoot)\n let exists = true\n try {\n await store.fetcher.load(new NamedNode(chatContainer.value + CHAT_LOCATION_IN_CONTAINER))\n } catch (e) {\n exists = false\n }\n return { me, chatContainer, exists}\n}\n\nexport async function getChat (invitee: NamedNode, createIfMissing = true): Promise<NamedNode> {\n const { me, chatContainer, exists } = await findChat (invitee)\n if (exists) {\n return new NamedNode(chatContainer.value + CHAT_LOCATION_IN_CONTAINER)\n }\n\n if (createIfMissing) {\n const chatThing = await createChatThing(chatContainer, me)\n await sendInvite(invitee, chatThing)\n await setAcl(chatContainer, me, invitee)\n await addToPrivateTypeIndex(chatThing, me)\n return chatThing\n }\n}\n"],"file":"create.js"}
|
package/lib/index.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
var _solidLogic = require("solid-logic");
|
|
4
|
+
|
|
3
5
|
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
|
|
4
6
|
|
|
5
7
|
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
|
|
6
8
|
|
|
7
|
-
/* global SolidAuthClient */
|
|
8
9
|
var ChatPane = require('./longChatPane.js');
|
|
9
10
|
|
|
10
11
|
var $rdf = require('rdflib');
|
|
@@ -64,7 +65,7 @@ window.followLink = /*#__PURE__*/function () {
|
|
|
64
65
|
doc = subject.doc();
|
|
65
66
|
_context.next = 4;
|
|
66
67
|
return new Promise(function (resolve, reject) {
|
|
67
|
-
|
|
68
|
+
_solidLogic.store.fetcher.load(doc).then(resolve, reject);
|
|
68
69
|
});
|
|
69
70
|
|
|
70
71
|
case 4:
|
|
@@ -75,12 +76,12 @@ window.followLink = /*#__PURE__*/function () {
|
|
|
75
76
|
break;
|
|
76
77
|
}
|
|
77
78
|
|
|
78
|
-
return _context.abrupt("return",
|
|
79
|
+
return _context.abrupt("return", _solidLogic.store.each(subject, predicate).map(function (n) {
|
|
79
80
|
return n.value;
|
|
80
81
|
}));
|
|
81
82
|
|
|
82
83
|
case 7:
|
|
83
|
-
return _context.abrupt("return",
|
|
84
|
+
return _context.abrupt("return", _solidLogic.store.any(subject, predicate).value);
|
|
84
85
|
|
|
85
86
|
case 8:
|
|
86
87
|
case "end":
|
|
@@ -105,18 +106,18 @@ function getChatsList() {
|
|
|
105
106
|
|
|
106
107
|
function _getChatsList() {
|
|
107
108
|
_getChatsList = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee5() {
|
|
108
|
-
var _yield$UI$
|
|
109
|
+
var _yield$UI$login$findA, instances;
|
|
109
110
|
|
|
110
111
|
return regeneratorRuntime.wrap(function _callee5$(_context5) {
|
|
111
112
|
while (1) {
|
|
112
113
|
switch (_context5.prev = _context5.next) {
|
|
113
114
|
case 0:
|
|
114
115
|
_context5.next = 2;
|
|
115
|
-
return UI.
|
|
116
|
+
return UI.login.findAppInstances({}, $rdf.sym('http://www.w3.org/ns/pim/meeting#LongChat'));
|
|
116
117
|
|
|
117
118
|
case 2:
|
|
118
|
-
_yield$UI$
|
|
119
|
-
instances = _yield$UI$
|
|
119
|
+
_yield$UI$login$findA = _context5.sent;
|
|
120
|
+
instances = _yield$UI$login$findA.instances;
|
|
120
121
|
return _context5.abrupt("return", "<h2>Your chats:\n<ul>\n ".concat(instances.map(function (n) {
|
|
121
122
|
return n.value;
|
|
122
123
|
}).map(toLi), "\n</ul>"));
|
|
@@ -137,7 +138,7 @@ window.inviteSomeone = /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorR
|
|
|
137
138
|
while (1) {
|
|
138
139
|
switch (_context2.prev = _context2.next) {
|
|
139
140
|
case 0:
|
|
140
|
-
invitee =
|
|
141
|
+
invitee = _solidLogic.store.namedNode(document.getElementById('invitee').value);
|
|
141
142
|
_context2.next = 3;
|
|
142
143
|
return getChat(invitee);
|
|
143
144
|
|
|
@@ -261,7 +262,7 @@ function _appendChatPane() {
|
|
|
261
262
|
doc = subject.doc();
|
|
262
263
|
_context8.next = 4;
|
|
263
264
|
return new Promise(function (resolve, reject) {
|
|
264
|
-
|
|
265
|
+
_solidLogic.store.fetcher.load(doc).then(resolve, reject);
|
|
265
266
|
});
|
|
266
267
|
|
|
267
268
|
case 4:
|
|
@@ -269,7 +270,7 @@ function _appendChatPane() {
|
|
|
269
270
|
// see https://github.com/solid/solid-panes/blob/005f90295d83e499fd626bd84aeb3df10135d5c1/src/index.ts#L30-L34
|
|
270
271
|
dom: dom,
|
|
271
272
|
session: {
|
|
272
|
-
store:
|
|
273
|
+
store: _solidLogic.store
|
|
273
274
|
}
|
|
274
275
|
};
|
|
275
276
|
options = {};
|
|
@@ -295,7 +296,7 @@ window.onload = function () {
|
|
|
295
296
|
console.log('document ready');
|
|
296
297
|
|
|
297
298
|
var onSessionChange = function onSessionChange() {
|
|
298
|
-
var currentUser =
|
|
299
|
+
var currentUser = _solidLogic.authn.currentUser();
|
|
299
300
|
|
|
300
301
|
if (!currentUser) {
|
|
301
302
|
console.log('The user is not logged in');
|
|
@@ -314,17 +315,20 @@ window.onload = function () {
|
|
|
314
315
|
}
|
|
315
316
|
};
|
|
316
317
|
|
|
317
|
-
|
|
318
|
+
_solidLogic.authSession.onLogin(function () {
|
|
318
319
|
return onSessionChange();
|
|
319
320
|
});
|
|
320
|
-
|
|
321
|
+
|
|
322
|
+
_solidLogic.authSession.onSessionRestore(function () {
|
|
321
323
|
return onSessionChange();
|
|
322
324
|
});
|
|
325
|
+
|
|
323
326
|
onSessionChange();
|
|
324
327
|
};
|
|
325
328
|
|
|
326
329
|
window.logout = function () {
|
|
327
|
-
|
|
330
|
+
_solidLogic.authSession.logout();
|
|
331
|
+
|
|
328
332
|
window.location = '';
|
|
329
333
|
};
|
|
330
334
|
|
|
@@ -333,8 +337,8 @@ window.popupLogin = /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRunt
|
|
|
333
337
|
while (1) {
|
|
334
338
|
switch (_context3.prev = _context3.next) {
|
|
335
339
|
case 0:
|
|
336
|
-
if (!
|
|
337
|
-
UI.
|
|
340
|
+
if (!_solidLogic.authn.currentUser()) {
|
|
341
|
+
UI.login.renderSignInPopup(document);
|
|
338
342
|
}
|
|
339
343
|
|
|
340
344
|
case 1:
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.js"],"names":["ChatPane","require","$rdf","UI","getChat","menuDiv","document","createElement","renderMenuDiv","console","log","getInvitesList","innerHTML","getChatsList","window","followLink","from","follow","multiple","subject","sym","doc","Promise","resolve","reject","store","fetcher","load","then","predicate","each","map","n","value","any","toLi","uri","encodeURIComponent","authn","findAppInstances","instances","inviteSomeone","invitee","namedNode","getElementById","created","SolidAuthClient","currentSession","webId","ns","ldp","globalInbox","inboxItems","invites","promises","x","rdf","inboxMsgTypes","isLongChatInvite","indexOf","chatUrl","push","error","all","appendChatPane","dom","context","session","options","body","appendChild","paneDiv","render","addEventListener","onload","onSessionChange","currentUser","decodeURIComponent","location","hash","substr","length","authSession","onLogin","onSessionRestore","logout","popupLogin","renderSignInPopup"],"mappings":"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","sourcesContent":["/* global SolidAuthClient */\n\nconst ChatPane = require('./longChatPane.js')\nconst $rdf = require('rdflib')\nconst UI = require('solid-ui')\nconst { getChat } = require('./create.ts')\n\nconst menuDiv = document.createElement('div')\n\nasync function renderMenuDiv () {\n console.log('get invites list')\n menuDiv.innerHTML = await getInvitesList()\n console.log('get chats list')\n menuDiv.innerHTML += await getChatsList()\n}\n// FIXME:\nwindow.$rdf = $rdf\nwindow.followLink = async function (from, follow, multiple) {\n const subject = $rdf.sym(from)\n const doc = subject.doc()\n await new Promise((resolve, reject) => {\n UI.store.fetcher.load(doc).then(resolve, reject)\n })\n const predicate = $rdf.sym(follow)\n if (multiple) {\n return UI.store.each(subject, predicate).map(n => n.value)\n }\n return UI.store.any(subject, predicate).value\n}\n\nfunction toLi (uri) {\n return `<li><a href=\"?#${encodeURIComponent(uri)}\">${uri}</a></li>`\n}\n\nasync function getChatsList () {\n const { instances } = await UI.authn.findAppInstances({}, $rdf.sym('http://www.w3.org/ns/pim/meeting#LongChat'))\n return `<h2>Your chats:\n<ul>\n ${instances.map(n => n.value).map(toLi)}\n</ul>`\n}\n\nwindow.inviteSomeone = async function () {\n const invitee = UI.store.namedNode(document.getElementById('invitee').value)\n const created = await getChat(invitee)\n console.log(created)\n renderMenuDiv()\n}\n\nasync function getInvitesList () {\n const webId = (await SolidAuthClient.currentSession()).webId\n const globalInbox = await window.followLink(webId, UI.ns.ldp('inbox'))\n const inboxItems = await window.followLink(globalInbox, UI.ns.ldp('contains'), true)\n const invites = []\n const promises = inboxItems.map(async x => {\n try {\n const inboxMsgTypes = await window.followLink(x, UI.ns.rdf('type'), true)\n const isLongChatInvite = (inboxMsgTypes.indexOf('http://www.w3.org/ns/pim/meeting#LongChatInvite') !== -1)\n if (isLongChatInvite) {\n console.log('new chat!', x)\n const chatUrl = await window.followLink(x, UI.ns.rdf('seeAlso'))\n invites.push(chatUrl)\n }\n } catch (e) {\n console.error('Failed to parse inbox item', x)\n }\n })\n await Promise.all(promises)\n return `<h2>Your Invites:\n <ul>\n ${invites.map(toLi)}\n </ul>\n Invite someone: <input id=\"invitee\"><button onclick=\"inviteSomeone()\">Send Invite</button>`\n}\n\nasync function appendChatPane (dom, uri) {\n const subject = $rdf.sym(uri)\n const doc = subject.doc()\n\n await new Promise((resolve, reject) => {\n UI.store.fetcher.load(doc).then(resolve, reject)\n })\n const context = { // see https://github.com/solid/solid-panes/blob/005f90295d83e499fd626bd84aeb3df10135d5c1/src/index.ts#L30-L34\n dom,\n session: {\n store: UI.store\n }\n }\n const options = {}\n renderMenuDiv()\n dom.body.appendChild(menuDiv)\n console.log('chat', subject)\n const paneDiv = ChatPane.render(subject, context, options)\n dom.body.appendChild(paneDiv)\n}\n\ndocument.addEventListener('DOMContentLoaded', function () {\n})\n\nwindow.onload = () => {\n console.log('document ready')\n const onSessionChange = () => {\n const currentUser = UI.authn.currentUser()\n if (!currentUser) {\n console.log('The user is not logged in')\n document.getElementById('loginBanner').innerHTML = '<button onclick=\"popupLogin()\">Log in</button>'\n } else {\n console.log(`Logged in as ${currentUser}`)\n\n document.getElementById('loginBanner').innerHTML = `Logged in as ${currentUser} <button onclick=\"logout()\">Log out</button>`\n // Set up the view for the subject indicated in the fragment of the window's URL\n const uri = decodeURIComponent(window.location.hash.substr(1))\n if (uri.length === 0) {\n window.location = '?#' + encodeURIComponent('https://solidos.solidcommunity.net/Team/SolidOs%20team%20chat/index.ttl#this')\n }\n appendChatPane(document, uri)\n }\n }\n UI.authn.authSession.onLogin(() => onSessionChange())\n UI.authn.authSession.onSessionRestore(() => onSessionChange())\n onSessionChange()\n}\nwindow.logout = () => {\n UI.authn.authSession.logout()\n window.location = ''\n}\nwindow.popupLogin = async function () {\n if (!UI.authn.currentUser()) {\n UI.authn.renderSignInPopup(document)\n }\n}\n"],"file":"index.js"}
|
|
1
|
+
{"version":3,"sources":["../src/index.js"],"names":["ChatPane","require","$rdf","UI","getChat","menuDiv","document","createElement","renderMenuDiv","console","log","getInvitesList","innerHTML","getChatsList","window","followLink","from","follow","multiple","subject","sym","doc","Promise","resolve","reject","store","fetcher","load","then","predicate","each","map","n","value","any","toLi","uri","encodeURIComponent","login","findAppInstances","instances","inviteSomeone","invitee","namedNode","getElementById","created","SolidAuthClient","currentSession","webId","ns","ldp","globalInbox","inboxItems","invites","promises","x","rdf","inboxMsgTypes","isLongChatInvite","indexOf","chatUrl","push","error","all","appendChatPane","dom","context","session","options","body","appendChild","paneDiv","render","addEventListener","onload","onSessionChange","currentUser","authn","decodeURIComponent","location","hash","substr","length","authSession","onLogin","onSessionRestore","logout","popupLogin","renderSignInPopup"],"mappings":"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","sourcesContent":["/* global SolidAuthClient */\n\nimport { store, authn, authSession } from 'solid-logic'\nconst ChatPane = require('./longChatPane.js')\nconst $rdf = require('rdflib')\nconst UI = require('solid-ui')\nconst { getChat } = require('./create.ts')\n\nconst menuDiv = document.createElement('div')\n\nasync function renderMenuDiv () {\n console.log('get invites list')\n menuDiv.innerHTML = await getInvitesList()\n console.log('get chats list')\n menuDiv.innerHTML += await getChatsList()\n}\n// FIXME:\nwindow.$rdf = $rdf\nwindow.followLink = async function (from, follow, multiple) {\n const subject = $rdf.sym(from)\n const doc = subject.doc()\n await new Promise((resolve, reject) => {\n store.fetcher.load(doc).then(resolve, reject)\n })\n const predicate = $rdf.sym(follow)\n if (multiple) {\n return store.each(subject, predicate).map(n => n.value)\n }\n return store.any(subject, predicate).value\n}\n\nfunction toLi (uri) {\n return `<li><a href=\"?#${encodeURIComponent(uri)}\">${uri}</a></li>`\n}\n\nasync function getChatsList () {\n const { instances } = await UI.login.findAppInstances({}, $rdf.sym('http://www.w3.org/ns/pim/meeting#LongChat'))\n return `<h2>Your chats:\n<ul>\n ${instances.map(n => n.value).map(toLi)}\n</ul>`\n}\n\nwindow.inviteSomeone = async function () {\n const invitee = store.namedNode(document.getElementById('invitee').value)\n const created = await getChat(invitee)\n console.log(created)\n renderMenuDiv()\n}\n\nasync function getInvitesList () {\n const webId = (await SolidAuthClient.currentSession()).webId\n const globalInbox = await window.followLink(webId, UI.ns.ldp('inbox'))\n const inboxItems = await window.followLink(globalInbox, UI.ns.ldp('contains'), true)\n const invites = []\n const promises = inboxItems.map(async x => {\n try {\n const inboxMsgTypes = await window.followLink(x, UI.ns.rdf('type'), true)\n const isLongChatInvite = (inboxMsgTypes.indexOf('http://www.w3.org/ns/pim/meeting#LongChatInvite') !== -1)\n if (isLongChatInvite) {\n console.log('new chat!', x)\n const chatUrl = await window.followLink(x, UI.ns.rdf('seeAlso'))\n invites.push(chatUrl)\n }\n } catch (e) {\n console.error('Failed to parse inbox item', x)\n }\n })\n await Promise.all(promises)\n return `<h2>Your Invites:\n <ul>\n ${invites.map(toLi)}\n </ul>\n Invite someone: <input id=\"invitee\"><button onclick=\"inviteSomeone()\">Send Invite</button>`\n}\n\nasync function appendChatPane (dom, uri) {\n const subject = $rdf.sym(uri)\n const doc = subject.doc()\n\n await new Promise((resolve, reject) => {\n store.fetcher.load(doc).then(resolve, reject)\n })\n const context = { // see https://github.com/solid/solid-panes/blob/005f90295d83e499fd626bd84aeb3df10135d5c1/src/index.ts#L30-L34\n dom,\n session: {\n store: store\n }\n }\n const options = {}\n renderMenuDiv()\n dom.body.appendChild(menuDiv)\n console.log('chat', subject)\n const paneDiv = ChatPane.render(subject, context, options)\n dom.body.appendChild(paneDiv)\n}\n\ndocument.addEventListener('DOMContentLoaded', function () {\n})\n\nwindow.onload = () => {\n console.log('document ready')\n const onSessionChange = () => {\n const currentUser = authn.currentUser()\n if (!currentUser) {\n console.log('The user is not logged in')\n document.getElementById('loginBanner').innerHTML = '<button onclick=\"popupLogin()\">Log in</button>'\n } else {\n console.log(`Logged in as ${currentUser}`)\n\n document.getElementById('loginBanner').innerHTML = `Logged in as ${currentUser} <button onclick=\"logout()\">Log out</button>`\n // Set up the view for the subject indicated in the fragment of the window's URL\n const uri = decodeURIComponent(window.location.hash.substr(1))\n if (uri.length === 0) {\n window.location = '?#' + encodeURIComponent('https://solidos.solidcommunity.net/Team/SolidOs%20team%20chat/index.ttl#this')\n }\n appendChatPane(document, uri)\n }\n }\n authSession.onLogin(() => onSessionChange())\n authSession.onSessionRestore(() => onSessionChange())\n onSessionChange()\n}\nwindow.logout = () => {\n authSession.logout()\n window.location = ''\n}\nwindow.popupLogin = async function () {\n if (!authn.currentUser()) {\n UI.login.renderSignInPopup(document)\n }\n}\n"],"file":"index.js"}
|
package/lib/longChatPane.js
CHANGED
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
var _solidLogic = require("solid-logic");
|
|
4
|
+
|
|
3
5
|
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
|
|
4
6
|
|
|
5
7
|
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
|
|
6
8
|
|
|
7
|
-
/* Long Chat Pane
|
|
8
|
-
**
|
|
9
|
-
** A long chat consists a of a series of chat files saved by date.
|
|
10
|
-
*/
|
|
11
9
|
var UI = require('solid-ui');
|
|
12
10
|
|
|
13
11
|
var ns = UI.ns;
|
|
@@ -124,7 +122,7 @@ module.exports = {
|
|
|
124
122
|
menuTable = preferencesArea.appendChild(dom.createElement('table'));
|
|
125
123
|
registrationArea = menuTable.appendChild(dom.createElement('tr'));
|
|
126
124
|
statusArea = menuTable.appendChild(dom.createElement('tr'));
|
|
127
|
-
me =
|
|
125
|
+
me = _solidLogic.authn.currentUser();
|
|
128
126
|
|
|
129
127
|
if (!me) {
|
|
130
128
|
_context.next = 15;
|
|
@@ -132,7 +130,7 @@ module.exports = {
|
|
|
132
130
|
}
|
|
133
131
|
|
|
134
132
|
_context.next = 13;
|
|
135
|
-
return UI.
|
|
133
|
+
return UI.login.registrationControl({
|
|
136
134
|
noun: noun,
|
|
137
135
|
me: me,
|
|
138
136
|
statusArea: statusArea,
|
|
@@ -228,7 +226,9 @@ module.exports = {
|
|
|
228
226
|
|
|
229
227
|
function renderCreationControl(refreshTarget, noun) {
|
|
230
228
|
var creationDiv = dom.createElement('div');
|
|
231
|
-
|
|
229
|
+
|
|
230
|
+
var me = _solidLogic.authn.currentUser();
|
|
231
|
+
|
|
232
232
|
var creationContext = {
|
|
233
233
|
// folder: subject,
|
|
234
234
|
div: creationDiv,
|
|
@@ -263,7 +263,7 @@ module.exports = {
|
|
|
263
263
|
noun: noun
|
|
264
264
|
};
|
|
265
265
|
_context3.next = 4;
|
|
266
|
-
return UI.
|
|
266
|
+
return UI.login.registrationList(context, {
|
|
267
267
|
"public": true,
|
|
268
268
|
"private": true,
|
|
269
269
|
type: theClass
|
|
@@ -349,7 +349,8 @@ module.exports = {
|
|
|
349
349
|
participantsArea.style.maxHeight = triptychHeight;
|
|
350
350
|
participantsArea.appendChild(panelCloseButton(participantsArea)); // Record my participation and display participants
|
|
351
351
|
|
|
352
|
-
var me =
|
|
352
|
+
var me = _solidLogic.authn.currentUser();
|
|
353
|
+
|
|
353
354
|
if (!me) alert('Should be logeed in for partipants panel');
|
|
354
355
|
UI.pad.manageParticipation(dom, participantsArea, chatChannel.doc(), chatChannel, me, {});
|
|
355
356
|
} // Toggle appearance in sidebar with clicks
|
|
@@ -427,7 +428,7 @@ module.exports = {
|
|
|
427
428
|
div: div,
|
|
428
429
|
dom: dom
|
|
429
430
|
};
|
|
430
|
-
participantsHandlerContext.me =
|
|
431
|
+
participantsHandlerContext.me = _solidLogic.authn.currentUser(); // If already logged on
|
|
431
432
|
|
|
432
433
|
function buildPane() {
|
|
433
434
|
return _buildPane.apply(this, arguments);
|
package/lib/longChatPane.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/longChatPane.js"],"names":["UI","require","ns","$rdf","mainClass","meeting","CHAT_LOCATION_IN_CONTAINER","SPANNER_ICON","SIDEBAR_COMPONENT_STYLE","style","sidebarComponentStyle","SIDEBAR_STYLE","sidebarStyle","module","exports","icon","icons","iconBase","name","label","subject","context","kb","session","store","holds","rdf","any","sioc","dct","mintClass","mintNew","newPaneOptions","updater","me","uri","Error","newInstance","sym","newBase","newChatDoc","doc","add","dc","Date","Promise","resolve","reject","put","statementsMatching","undefined","uri2","ok","message","render","paneOptions","dom","preferencesFormText","preferencesForm","preferencesFormDoc","parse","preferenceProperties","ui","property","map","st","object","renderPreferencesSidebar","noun","preferencesArea","createElement","appendChild","panelCloseButton","minWidth","maxHeight","triptychHeight","menuTable","registrationArea","statusArea","authn","currentUser","registrationControl","div","chatChannel","console","log","preferences","renderPreferencesForm","panel","removePanel","parentNode","removeChild","button","widgets","margin","backgroundColor","preferencesButtonPressed","_event","paneRight","contains","renderCreationControl","refreshTarget","creationDiv","creationContext","chatPane","paneRegistry","byName","relevantPanes","create","newThingUI","renderInstances","theClass","instancesDiv","registrationList","type","otherChatsArea","otherChatsHandler","paneLeft","participantsArea","participantsHandler","alert","pad","manageParticipation","selectedMessage","wf","triptych","paneRow","paneMiddle","paneBottom","paddingRight","paddingLeft","buttonCell","participantsIcon","participantsButton","addEventListener","otherChatsIcon","otherChatsButton","menuButton","setAttribute","options","infinite","participantsHandlerContext","buildPane","getPreferencesForClass","prefMap","complain","propuri","split","solo","infiniteMessageArea","chatControl","resize","overflow","then"],"mappings":"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","sourcesContent":["/* Long Chat Pane\n **\n ** A long chat consists a of a series of chat files saved by date.\n */\n\nconst UI = require('solid-ui')\nconst ns = UI.ns\nconst $rdf = require('rdflib')\n\nconst mainClass = ns.meeting('LongChat') // @@ something from SIOC?\n\nconst CHAT_LOCATION_IN_CONTAINER = 'index.ttl#this'\n\n// const menuIcon = 'noun_897914.svg'\nconst SPANNER_ICON = 'noun_344563.svg'\n// resize: horizontal; min-width: 20em;\nconst SIDEBAR_COMPONENT_STYLE = UI.style.sidebarComponentStyle || ' padding: 0.5em; width: 100%;'\nconst SIDEBAR_STYLE = UI.style.sidebarStyle || 'overflow-x: auto; overflow-y: auto; border-radius: 1em; border: 0.1em solid white;'\n// was purple border\nmodule.exports = {\n CHAT_LOCATION_IN_CONTAINER,\n\n // noun_704.svg Canoe noun_346319.svg = 1 Chat noun_1689339.svg = three chat\n icon: UI.icons.iconBase + 'noun_1689339.svg',\n\n name: 'long chat',\n\n label: function (subject, context) {\n const kb = context.session.store\n if (kb.holds(subject, ns.rdf('type'), ns.meeting('LongChat'))) {\n // subject is the object\n return 'Chat channnel'\n } // Looks like a message -- might not havre any class declared\n if (\n kb.any(subject, ns.sioc('content')) &&\n kb.any(subject, ns.dct('created'))\n ) {\n return 'message'\n }\n return null // Suppress pane otherwise\n },\n\n mintClass: mainClass,\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 + CHAT_LOCATION_IN_CONTAINER))\n var newChatDoc = newInstance.doc()\n\n kb.add(newInstance, ns.rdf('type'), ns.meeting('LongChat'), newChatDoc)\n kb.add(newInstance, ns.dc('title'), 'Chat channel', 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(\n 'FAILED to save new chat channel at: ' + uri2 + ' : ' + message\n )\n )\n }\n }\n )\n })\n },\n\n render: function (subject, context, paneOptions) {\n const dom = context.dom\n const kb = context.session.store\n\n /* Preferences\n **\n ** Things like whether to color text by author webid, to expand image URLs inline,\n ** expanded inline image height. ...\n ** In general, preferences can be set per user, per user/app combo, per instance,\n ** and per instance/user combo. Per instance? not sure about unless it is valuable\n ** for everyone to be seeing the same thing.\n */\n // const DCT = $rdf.Namespace('http://purl.org/dc/terms/')\n const preferencesFormText = `\n @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.\n @prefix solid: <http://www.w3.org/ns/solid/terms#>.\n @prefix ui: <http://www.w3.org/ns/ui#>.\n @prefix : <#>.\n\n :this\n <http://purl.org/dc/elements/1.1/title> \"Chat preferences\" ;\n a ui:Form ;\n ui:parts ( :colorizeByAuthor :expandImagesInline :newestFirst :inlineImageHeightEms\n :shiftEnterSendsMessage :authorDateOnLeft :showDeletedMessages).\n\n :colorizeByAuthor a ui:TristateField; ui:property solid:colorizeByAuthor;\n ui:label \"Color user input by user\".\n\n :expandImagesInline a ui:TristateField; ui:property solid:expandImagesInline;\n ui:label \"Expand image URLs inline\".\n\n :newestFirst a ui:TristateField; ui:property solid:newestFirst;\n ui:label \"Newest messages at the top\".\n\n :inlineImageHeightEms a ui:IntegerField; ui:property solid:inlineImageHeightEms;\n ui:label \"Inline image height (lines)\".\n\n :shiftEnterSendsMessage a ui:TristateField; ui:property solid:shiftEnterSendsMessage;\n ui:label \"Shift-Enter sends message\".\n\n :authorDateOnLeft a ui:TristateField; ui:property solid:authorDateOnLeft;\n ui:label \"Author & date of message on left\".\n\n :showDeletedMessages a ui:TristateField; ui:property solid:showDeletedMessages;\n ui:label \"Show placeholders for deleted messages\".\n`\n const preferencesForm = kb.sym(\n 'https://solid.github.io/solid-panes/longCharPane/preferencesForm.ttl#this'\n )\n const preferencesFormDoc = preferencesForm.doc()\n if (!kb.holds(undefined, undefined, undefined, preferencesFormDoc)) {\n // If not loaded already\n $rdf.parse(preferencesFormText, kb, preferencesFormDoc.uri, 'text/turtle') // Load form directly\n }\n const preferenceProperties = kb\n .statementsMatching(null, ns.ui.property, null, preferencesFormDoc)\n .map(st => st.object)\n\n // Preferences Menu\n //\n // Build a menu a the side (@@ reactive: on top?)\n\n async function renderPreferencesSidebar (context) {\n // const noun = 'chat room'\n const { dom, noun } = context\n const preferencesArea = dom.createElement('div')\n preferencesArea.appendChild(panelCloseButton(preferencesArea))\n // @@ style below fix .. just make it onviious while testing\n preferencesArea.style = SIDEBAR_COMPONENT_STYLE\n preferencesArea.style.minWidth = '25em' // bit bigger\n preferencesArea.style.maxHeight = triptychHeight\n const menuTable = preferencesArea.appendChild(dom.createElement('table'))\n const registrationArea = menuTable.appendChild(dom.createElement('tr'))\n const statusArea = menuTable.appendChild(dom.createElement('tr'))\n\n var me = UI.authn.currentUser()\n if (me) {\n await UI.authn.registrationControl(\n { noun, me, statusArea, dom, div: registrationArea },\n chatChannel,\n mainClass\n )\n console.log('Registration control finsished.')\n preferencesArea.appendChild(\n UI.preferences.renderPreferencesForm(\n chatChannel,\n mainClass,\n preferencesForm,\n {\n noun,\n me,\n statusArea,\n div: preferencesArea,\n dom,\n kb\n }\n )\n )\n }\n return preferencesArea\n }\n\n // @@ Split out into solid-ui\n\n function panelCloseButton (panel) {\n function removePanel () {\n panel.parentNode.removeChild(panel)\n }\n const button =\n UI.widgets.button(context.dom, UI.icons.iconBase + 'noun_1180156.svg', 'close', removePanel)\n button.style.float = 'right'\n button.style.margin = '0.7em'\n delete button.style.backgroundColor // do not want white\n return button\n }\n async function preferencesButtonPressed (_event) {\n if (!preferencesArea) {\n // Expand\n preferencesArea = await renderPreferencesSidebar({ dom, noun: 'chat room' })\n }\n if (paneRight.contains(preferencesArea)) {\n // Close menu (hide or delete??)\n preferencesArea.parentNode.removeChild(preferencesArea)\n preferencesArea = null\n } else {\n paneRight.appendChild(preferencesArea)\n }\n } // preferencesButtonPressed\n\n // All my chats\n //\n /* Build a other chats list drawer the side\n */\n\n function renderCreationControl (refreshTarget, noun) {\n var creationDiv = dom.createElement('div')\n var me = UI.authn.currentUser()\n var creationContext = {\n // folder: subject,\n div: creationDiv,\n dom: dom,\n noun: noun,\n statusArea: creationDiv,\n me: me,\n refreshTarget: refreshTarget\n }\n const chatPane = context.session.paneRegistry.byName('chat')\n const relevantPanes = [chatPane]\n UI.create.newThingUI(creationContext, context, relevantPanes) // Have to pass panes down newUI\n return creationDiv\n }\n\n async function renderInstances (theClass, noun) {\n const instancesDiv = dom.createElement('div')\n var context = { dom, div: instancesDiv, noun: noun }\n await UI.authn.registrationList(context, { public: true, private: true, type: theClass })\n instancesDiv.appendChild(renderCreationControl(instancesDiv, noun))\n return instancesDiv\n }\n\n var otherChatsArea = null\n async function otherChatsHandler (_event) {\n if (!otherChatsArea) { // Lazy build when needed\n // Expand\n otherChatsArea = dom.createElement('div')\n otherChatsArea.style = SIDEBAR_COMPONENT_STYLE\n otherChatsArea.style.maxHeight = triptychHeight\n otherChatsArea.appendChild(panelCloseButton(otherChatsArea))\n\n otherChatsArea.appendChild(await renderInstances(ns.meeting('LongChat'), 'chat'))\n }\n // Toggle visibility with button clicks\n if (paneLeft.contains(otherChatsArea)) {\n otherChatsArea.parentNode.removeChild(otherChatsArea)\n } else {\n paneLeft.appendChild(otherChatsArea)\n }\n } // otherChatsHandler\n\n // People in the chat\n //\n /* Build a participants list drawer the side\n */\n var participantsArea\n function participantsHandler (_event) {\n if (!participantsArea) {\n // Expand\n participantsArea = dom.createElement('div')\n participantsArea.style = SIDEBAR_COMPONENT_STYLE\n participantsArea.style.maxHeight = triptychHeight\n participantsArea.appendChild(panelCloseButton(participantsArea))\n\n // Record my participation and display participants\n var me = UI.authn.currentUser()\n if (!me) alert('Should be logeed in for partipants panel')\n UI.pad.manageParticipation(\n dom,\n participantsArea,\n chatChannel.doc(),\n chatChannel,\n me,\n {}\n )\n }\n // Toggle appearance in sidebar with clicks\n // Note also it can remove itself using the X button\n if (paneLeft.contains(participantsArea)) {\n // Close participants (hide or delete??)\n participantsArea.parentNode.removeChild(participantsArea)\n participantsArea = null\n } else {\n paneLeft.appendChild(participantsArea)\n }\n } // participantsHandler\n\n var chatChannel = subject\n var selectedMessage = null\n if (kb.holds(subject, ns.rdf('type'), ns.meeting('LongChat'))) {\n // subject is the chatChannel\n console.log('Chat channnel')\n\n // Looks like a message -- might not havre any class declared\n } else if (\n kb.any(subject, ns.sioc('content')) &&\n kb.any(subject, ns.dct('created'))\n ) {\n console.log('message')\n selectedMessage = subject\n chatChannel = kb.any(null, ns.wf('message'), selectedMessage)\n if (!chatChannel) throw new Error('Message has no link to chatChannel')\n }\n\n var div = dom.createElement('div')\n\n // Three large columns for particpant, chat, Preferences. formula below just as a note\n // const windowHeight = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight\n const triptychHeight = '20cm' // @@ need to be able to set to window!\n var triptych = div.appendChild(dom.createElement('table'))\n triptych.style.maxHeight = '12\"' // Screen max\n var paneRow = triptych.appendChild(dom.createElement('tr'))\n var paneLeft = paneRow.appendChild(dom.createElement('td'))\n var paneMiddle = paneRow.appendChild(dom.createElement('td'))\n var paneRight = paneRow.appendChild(dom.createElement('td'))\n var paneBottom = triptych.appendChild(dom.createElement('tr'))\n paneLeft.style = SIDEBAR_STYLE\n paneLeft.style.paddingRight = '1em'\n paneRight.style = SIDEBAR_STYLE\n paneRight.style.paddingLeft = '1em'\n\n paneBottom.appendChild(dom.createElement('td'))\n const buttonCell = paneBottom.appendChild(dom.createElement('td'))\n paneBottom.appendChild(dom.createElement('td'))\n\n // Button to bring up participants drawer on left\n const participantsIcon = 'noun_339237.svg'\n var participantsButton = UI.widgets.button(\n dom,\n UI.icons.iconBase + participantsIcon,\n 'participants ...'\n ) // wider var\n buttonCell.appendChild(participantsButton)\n participantsButton.addEventListener('click', participantsHandler)\n\n // Button to bring up otherChats drawer on left\n const otherChatsIcon = 'noun_1689339.svg' // long chat icon -- not ideal for a set of chats @@\n var otherChatsButton = UI.widgets.button(\n dom,\n UI.icons.iconBase + otherChatsIcon,\n 'List of other chats ...'\n ) // wider var\n buttonCell.appendChild(otherChatsButton)\n otherChatsButton.addEventListener('click', otherChatsHandler)\n\n var preferencesArea = null\n const menuButton = UI.widgets.button(\n dom,\n UI.icons.iconBase + SPANNER_ICON,\n 'Setting ...'\n ) // wider var\n buttonCell.appendChild(menuButton)\n menuButton.style.float = 'right'\n menuButton.addEventListener('click', preferencesButtonPressed)\n\n div.setAttribute('class', 'chatPane')\n const options = { infinite: true }\n const participantsHandlerContext = { noun: 'chat room', div, dom: dom }\n participantsHandlerContext.me = UI.authn.currentUser() // If already logged on\n\n async function buildPane () {\n let prefMap\n try {\n prefMap = await UI.preferences.getPreferencesForClass(\n chatChannel, mainClass, preferenceProperties, participantsHandlerContext)\n } catch (err) {\n UI.widgets.complain(participantsHandlerContext, err)\n }\n for (const propuri in prefMap) {\n options[propuri.split('#')[1]] = prefMap[propuri]\n }\n if (selectedMessage) {\n options.selectedMessage = selectedMessage\n }\n if (paneOptions.solo) {\n // This is the top pane, title, scrollbar etc are ours\n options.solo = true\n }\n const chatControl = await UI.infiniteMessageArea(\n dom,\n kb,\n chatChannel,\n options\n )\n chatControl.style.resize = 'both'\n chatControl.style.overflow = 'auto'\n chatControl.style.maxHeight = triptychHeight\n paneMiddle.appendChild(chatControl)\n }\n buildPane().then(console.log('async - chat pane built'))\n return div\n }\n}\n"],"file":"longChatPane.js"}
|
|
1
|
+
{"version":3,"sources":["../src/longChatPane.js"],"names":["UI","require","ns","$rdf","mainClass","meeting","CHAT_LOCATION_IN_CONTAINER","SPANNER_ICON","SIDEBAR_COMPONENT_STYLE","style","sidebarComponentStyle","SIDEBAR_STYLE","sidebarStyle","module","exports","icon","icons","iconBase","name","label","subject","context","kb","session","store","holds","rdf","any","sioc","dct","mintClass","mintNew","newPaneOptions","updater","me","uri","Error","newInstance","sym","newBase","newChatDoc","doc","add","dc","Date","Promise","resolve","reject","put","statementsMatching","undefined","uri2","ok","message","render","paneOptions","dom","preferencesFormText","preferencesForm","preferencesFormDoc","parse","preferenceProperties","ui","property","map","st","object","renderPreferencesSidebar","noun","preferencesArea","createElement","appendChild","panelCloseButton","minWidth","maxHeight","triptychHeight","menuTable","registrationArea","statusArea","authn","currentUser","login","registrationControl","div","chatChannel","console","log","preferences","renderPreferencesForm","panel","removePanel","parentNode","removeChild","button","widgets","margin","backgroundColor","preferencesButtonPressed","_event","paneRight","contains","renderCreationControl","refreshTarget","creationDiv","creationContext","chatPane","paneRegistry","byName","relevantPanes","create","newThingUI","renderInstances","theClass","instancesDiv","registrationList","type","otherChatsArea","otherChatsHandler","paneLeft","participantsArea","participantsHandler","alert","pad","manageParticipation","selectedMessage","wf","triptych","paneRow","paneMiddle","paneBottom","paddingRight","paddingLeft","buttonCell","participantsIcon","participantsButton","addEventListener","otherChatsIcon","otherChatsButton","menuButton","setAttribute","options","infinite","participantsHandlerContext","buildPane","getPreferencesForClass","prefMap","complain","propuri","split","solo","infiniteMessageArea","chatControl","resize","overflow","then"],"mappings":"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","sourcesContent":["/* Long Chat Pane\n **\n ** A long chat consists a of a series of chat files saved by date.\n */\nimport { authn } from 'solid-logic'\nconst UI = require('solid-ui')\nconst ns = UI.ns\nconst $rdf = require('rdflib')\n\nconst mainClass = ns.meeting('LongChat') // @@ something from SIOC?\n\nconst CHAT_LOCATION_IN_CONTAINER = 'index.ttl#this'\n\n// const menuIcon = 'noun_897914.svg'\nconst SPANNER_ICON = 'noun_344563.svg'\n// resize: horizontal; min-width: 20em;\nconst SIDEBAR_COMPONENT_STYLE = UI.style.sidebarComponentStyle || ' padding: 0.5em; width: 100%;'\nconst SIDEBAR_STYLE = UI.style.sidebarStyle || 'overflow-x: auto; overflow-y: auto; border-radius: 1em; border: 0.1em solid white;'\n// was purple border\nmodule.exports = {\n CHAT_LOCATION_IN_CONTAINER,\n\n // noun_704.svg Canoe noun_346319.svg = 1 Chat noun_1689339.svg = three chat\n icon: UI.icons.iconBase + 'noun_1689339.svg',\n\n name: 'long chat',\n\n label: function (subject, context) {\n const kb = context.session.store\n if (kb.holds(subject, ns.rdf('type'), ns.meeting('LongChat'))) {\n // subject is the object\n return 'Chat channnel'\n } // Looks like a message -- might not havre any class declared\n if (\n kb.any(subject, ns.sioc('content')) &&\n kb.any(subject, ns.dct('created'))\n ) {\n return 'message'\n }\n return null // Suppress pane otherwise\n },\n\n mintClass: mainClass,\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 + CHAT_LOCATION_IN_CONTAINER))\n var newChatDoc = newInstance.doc()\n\n kb.add(newInstance, ns.rdf('type'), ns.meeting('LongChat'), newChatDoc)\n kb.add(newInstance, ns.dc('title'), 'Chat channel', 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(\n 'FAILED to save new chat channel at: ' + uri2 + ' : ' + message\n )\n )\n }\n }\n )\n })\n },\n\n render: function (subject, context, paneOptions) {\n const dom = context.dom\n const kb = context.session.store\n\n /* Preferences\n **\n ** Things like whether to color text by author webid, to expand image URLs inline,\n ** expanded inline image height. ...\n ** In general, preferences can be set per user, per user/app combo, per instance,\n ** and per instance/user combo. Per instance? not sure about unless it is valuable\n ** for everyone to be seeing the same thing.\n */\n // const DCT = $rdf.Namespace('http://purl.org/dc/terms/')\n const preferencesFormText = `\n @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.\n @prefix solid: <http://www.w3.org/ns/solid/terms#>.\n @prefix ui: <http://www.w3.org/ns/ui#>.\n @prefix : <#>.\n\n :this\n <http://purl.org/dc/elements/1.1/title> \"Chat preferences\" ;\n a ui:Form ;\n ui:parts ( :colorizeByAuthor :expandImagesInline :newestFirst :inlineImageHeightEms\n :shiftEnterSendsMessage :authorDateOnLeft :showDeletedMessages).\n\n :colorizeByAuthor a ui:TristateField; ui:property solid:colorizeByAuthor;\n ui:label \"Color user input by user\".\n\n :expandImagesInline a ui:TristateField; ui:property solid:expandImagesInline;\n ui:label \"Expand image URLs inline\".\n\n :newestFirst a ui:TristateField; ui:property solid:newestFirst;\n ui:label \"Newest messages at the top\".\n\n :inlineImageHeightEms a ui:IntegerField; ui:property solid:inlineImageHeightEms;\n ui:label \"Inline image height (lines)\".\n\n :shiftEnterSendsMessage a ui:TristateField; ui:property solid:shiftEnterSendsMessage;\n ui:label \"Shift-Enter sends message\".\n\n :authorDateOnLeft a ui:TristateField; ui:property solid:authorDateOnLeft;\n ui:label \"Author & date of message on left\".\n\n :showDeletedMessages a ui:TristateField; ui:property solid:showDeletedMessages;\n ui:label \"Show placeholders for deleted messages\".\n`\n const preferencesForm = kb.sym(\n 'https://solid.github.io/solid-panes/longCharPane/preferencesForm.ttl#this'\n )\n const preferencesFormDoc = preferencesForm.doc()\n if (!kb.holds(undefined, undefined, undefined, preferencesFormDoc)) {\n // If not loaded already\n $rdf.parse(preferencesFormText, kb, preferencesFormDoc.uri, 'text/turtle') // Load form directly\n }\n const preferenceProperties = kb\n .statementsMatching(null, ns.ui.property, null, preferencesFormDoc)\n .map(st => st.object)\n\n // Preferences Menu\n //\n // Build a menu a the side (@@ reactive: on top?)\n\n async function renderPreferencesSidebar (context) {\n // const noun = 'chat room'\n const { dom, noun } = context\n const preferencesArea = dom.createElement('div')\n preferencesArea.appendChild(panelCloseButton(preferencesArea))\n // @@ style below fix .. just make it onviious while testing\n preferencesArea.style = SIDEBAR_COMPONENT_STYLE\n preferencesArea.style.minWidth = '25em' // bit bigger\n preferencesArea.style.maxHeight = triptychHeight\n const menuTable = preferencesArea.appendChild(dom.createElement('table'))\n const registrationArea = menuTable.appendChild(dom.createElement('tr'))\n const statusArea = menuTable.appendChild(dom.createElement('tr'))\n\n var me = authn.currentUser()\n if (me) {\n await UI.login.registrationControl(\n { noun, me, statusArea, dom, div: registrationArea },\n chatChannel,\n mainClass\n )\n console.log('Registration control finsished.')\n preferencesArea.appendChild(\n UI.preferences.renderPreferencesForm(\n chatChannel,\n mainClass,\n preferencesForm,\n {\n noun,\n me,\n statusArea,\n div: preferencesArea,\n dom,\n kb\n }\n )\n )\n }\n return preferencesArea\n }\n\n // @@ Split out into solid-ui\n\n function panelCloseButton (panel) {\n function removePanel () {\n panel.parentNode.removeChild(panel)\n }\n const button =\n UI.widgets.button(context.dom, UI.icons.iconBase + 'noun_1180156.svg', 'close', removePanel)\n button.style.float = 'right'\n button.style.margin = '0.7em'\n delete button.style.backgroundColor // do not want white\n return button\n }\n async function preferencesButtonPressed (_event) {\n if (!preferencesArea) {\n // Expand\n preferencesArea = await renderPreferencesSidebar({ dom, noun: 'chat room' })\n }\n if (paneRight.contains(preferencesArea)) {\n // Close menu (hide or delete??)\n preferencesArea.parentNode.removeChild(preferencesArea)\n preferencesArea = null\n } else {\n paneRight.appendChild(preferencesArea)\n }\n } // preferencesButtonPressed\n\n // All my chats\n //\n /* Build a other chats list drawer the side\n */\n\n function renderCreationControl (refreshTarget, noun) {\n var creationDiv = dom.createElement('div')\n var me = authn.currentUser()\n var creationContext = {\n // folder: subject,\n div: creationDiv,\n dom: dom,\n noun: noun,\n statusArea: creationDiv,\n me: me,\n refreshTarget: refreshTarget\n }\n const chatPane = context.session.paneRegistry.byName('chat')\n const relevantPanes = [chatPane]\n UI.create.newThingUI(creationContext, context, relevantPanes) // Have to pass panes down newUI\n return creationDiv\n }\n\n async function renderInstances (theClass, noun) {\n const instancesDiv = dom.createElement('div')\n var context = { dom, div: instancesDiv, noun: noun }\n await UI.login.registrationList(context, { public: true, private: true, type: theClass })\n instancesDiv.appendChild(renderCreationControl(instancesDiv, noun))\n return instancesDiv\n }\n\n var otherChatsArea = null\n async function otherChatsHandler (_event) {\n if (!otherChatsArea) { // Lazy build when needed\n // Expand\n otherChatsArea = dom.createElement('div')\n otherChatsArea.style = SIDEBAR_COMPONENT_STYLE\n otherChatsArea.style.maxHeight = triptychHeight\n otherChatsArea.appendChild(panelCloseButton(otherChatsArea))\n\n otherChatsArea.appendChild(await renderInstances(ns.meeting('LongChat'), 'chat'))\n }\n // Toggle visibility with button clicks\n if (paneLeft.contains(otherChatsArea)) {\n otherChatsArea.parentNode.removeChild(otherChatsArea)\n } else {\n paneLeft.appendChild(otherChatsArea)\n }\n } // otherChatsHandler\n\n // People in the chat\n //\n /* Build a participants list drawer the side\n */\n var participantsArea\n function participantsHandler (_event) {\n if (!participantsArea) {\n // Expand\n participantsArea = dom.createElement('div')\n participantsArea.style = SIDEBAR_COMPONENT_STYLE\n participantsArea.style.maxHeight = triptychHeight\n participantsArea.appendChild(panelCloseButton(participantsArea))\n\n // Record my participation and display participants\n var me = authn.currentUser()\n if (!me) alert('Should be logeed in for partipants panel')\n UI.pad.manageParticipation(\n dom,\n participantsArea,\n chatChannel.doc(),\n chatChannel,\n me,\n {}\n )\n }\n // Toggle appearance in sidebar with clicks\n // Note also it can remove itself using the X button\n if (paneLeft.contains(participantsArea)) {\n // Close participants (hide or delete??)\n participantsArea.parentNode.removeChild(participantsArea)\n participantsArea = null\n } else {\n paneLeft.appendChild(participantsArea)\n }\n } // participantsHandler\n\n var chatChannel = subject\n var selectedMessage = null\n if (kb.holds(subject, ns.rdf('type'), ns.meeting('LongChat'))) {\n // subject is the chatChannel\n console.log('Chat channnel')\n\n // Looks like a message -- might not havre any class declared\n } else if (\n kb.any(subject, ns.sioc('content')) &&\n kb.any(subject, ns.dct('created'))\n ) {\n console.log('message')\n selectedMessage = subject\n chatChannel = kb.any(null, ns.wf('message'), selectedMessage)\n if (!chatChannel) throw new Error('Message has no link to chatChannel')\n }\n\n var div = dom.createElement('div')\n\n // Three large columns for particpant, chat, Preferences. formula below just as a note\n // const windowHeight = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight\n const triptychHeight = '20cm' // @@ need to be able to set to window!\n var triptych = div.appendChild(dom.createElement('table'))\n triptych.style.maxHeight = '12\"' // Screen max\n var paneRow = triptych.appendChild(dom.createElement('tr'))\n var paneLeft = paneRow.appendChild(dom.createElement('td'))\n var paneMiddle = paneRow.appendChild(dom.createElement('td'))\n var paneRight = paneRow.appendChild(dom.createElement('td'))\n var paneBottom = triptych.appendChild(dom.createElement('tr'))\n paneLeft.style = SIDEBAR_STYLE\n paneLeft.style.paddingRight = '1em'\n paneRight.style = SIDEBAR_STYLE\n paneRight.style.paddingLeft = '1em'\n\n paneBottom.appendChild(dom.createElement('td'))\n const buttonCell = paneBottom.appendChild(dom.createElement('td'))\n paneBottom.appendChild(dom.createElement('td'))\n\n // Button to bring up participants drawer on left\n const participantsIcon = 'noun_339237.svg'\n var participantsButton = UI.widgets.button(\n dom,\n UI.icons.iconBase + participantsIcon,\n 'participants ...'\n ) // wider var\n buttonCell.appendChild(participantsButton)\n participantsButton.addEventListener('click', participantsHandler)\n\n // Button to bring up otherChats drawer on left\n const otherChatsIcon = 'noun_1689339.svg' // long chat icon -- not ideal for a set of chats @@\n var otherChatsButton = UI.widgets.button(\n dom,\n UI.icons.iconBase + otherChatsIcon,\n 'List of other chats ...'\n ) // wider var\n buttonCell.appendChild(otherChatsButton)\n otherChatsButton.addEventListener('click', otherChatsHandler)\n\n var preferencesArea = null\n const menuButton = UI.widgets.button(\n dom,\n UI.icons.iconBase + SPANNER_ICON,\n 'Setting ...'\n ) // wider var\n buttonCell.appendChild(menuButton)\n menuButton.style.float = 'right'\n menuButton.addEventListener('click', preferencesButtonPressed)\n\n div.setAttribute('class', 'chatPane')\n const options = { infinite: true }\n const participantsHandlerContext = { noun: 'chat room', div, dom: dom }\n participantsHandlerContext.me = authn.currentUser() // If already logged on\n\n async function buildPane () {\n let prefMap\n try {\n prefMap = await UI.preferences.getPreferencesForClass(\n chatChannel, mainClass, preferenceProperties, participantsHandlerContext)\n } catch (err) {\n UI.widgets.complain(participantsHandlerContext, err)\n }\n for (const propuri in prefMap) {\n options[propuri.split('#')[1]] = prefMap[propuri]\n }\n if (selectedMessage) {\n options.selectedMessage = selectedMessage\n }\n if (paneOptions.solo) {\n // This is the top pane, title, scrollbar etc are ours\n options.solo = true\n }\n const chatControl = await UI.infiniteMessageArea(\n dom,\n kb,\n chatChannel,\n options\n )\n chatControl.style.resize = 'both'\n chatControl.style.overflow = 'auto'\n chatControl.style.maxHeight = triptychHeight\n paneMiddle.appendChild(chatControl)\n }\n buildPane().then(console.log('async - chat pane built'))\n return div\n }\n}\n"],"file":"longChatPane.js"}
|
package/lib/shortChatPane.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
var _solidLogic = require("solid-logic");
|
|
4
|
+
|
|
3
5
|
/* Chat Pane
|
|
4
6
|
**
|
|
5
7
|
** Plan is to support a finte number of chat graph shapes
|
|
@@ -109,7 +111,7 @@ module.exports = {
|
|
|
109
111
|
// subject may be the file
|
|
110
112
|
messageStore = subject.doc();
|
|
111
113
|
} else if (kb.any(subject, UI.ns.wf('message'))) {
|
|
112
|
-
messageStore =
|
|
114
|
+
messageStore = _solidLogic.store.any(subject, UI.ns.wf('message')).doc();
|
|
113
115
|
} else if (kb.holds(undefined, ns.rdf('type'), ns.foaf('ChatChannel'), subject) || kb.holds(subject, ns.rdf('type'), ns.foaf('ChatChannel'))) {
|
|
114
116
|
// subject is the file
|
|
115
117
|
var ircLogQuery = function ircLogQuery() {
|