solid-ui 2.4.16-9d8eda18 → 2.4.16-9e276990
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/README.md +2 -2
- package/lib/acl/access-controller.d.ts.map +1 -1
- package/lib/acl/access-controller.js +5 -1
- package/lib/acl/access-controller.js.map +1 -1
- package/lib/acl/access-groups.d.ts +2 -2
- package/lib/acl/access-groups.d.ts.map +1 -1
- package/lib/acl/access-groups.js +1 -5
- package/lib/acl/access-groups.js.map +1 -1
- package/lib/acl/acl.d.ts.map +1 -1
- package/lib/acl/acl.js +4 -2
- package/lib/acl/acl.js.map +1 -1
- package/lib/acl/add-agent-buttons.d.ts.map +1 -1
- package/lib/acl/add-agent-buttons.js +5 -5
- package/lib/acl/add-agent-buttons.js.map +1 -1
- package/lib/authn/authSession.d.ts +4 -0
- package/lib/authn/authSession.d.ts.map +1 -0
- package/lib/authn/authSession.js +25 -0
- package/lib/authn/authSession.js.map +1 -0
- package/lib/authn/authn.d.ts +193 -0
- package/lib/authn/authn.d.ts.map +1 -0
- package/lib/authn/authn.js +2238 -0
- package/lib/authn/authn.js.map +1 -0
- package/lib/{signup → authn}/config-default.js +0 -0
- package/lib/authn/config-default.js.map +1 -0
- package/lib/authn/index.d.ts +35 -0
- package/lib/authn/index.d.ts.map +1 -0
- package/lib/authn/index.js +44 -0
- package/lib/authn/index.js.map +1 -0
- package/lib/{signup → authn}/signup.js +0 -0
- package/lib/authn/signup.js.map +1 -0
- package/lib/authn/types.d.ts +25 -0
- package/lib/authn/types.d.ts.map +1 -0
- package/lib/authn/types.js +6 -0
- package/lib/authn/types.js.map +1 -0
- package/lib/chat/bookmarks.js +22 -20
- package/lib/chat/bookmarks.js.map +1 -1
- package/lib/chat/chatLogic.js +15 -13
- package/lib/chat/chatLogic.js.map +1 -1
- package/lib/chat/dateFolder.js +10 -10
- package/lib/chat/dateFolder.js.map +1 -1
- package/lib/chat/infinite.js +16 -14
- package/lib/chat/infinite.js.map +1 -1
- package/lib/chat/message.js +21 -17
- package/lib/chat/message.js.map +1 -1
- package/lib/chat/messageTools.js +21 -16
- package/lib/chat/messageTools.js.map +1 -1
- package/lib/chat/thread.js +24 -24
- package/lib/chat/thread.js.map +1 -1
- package/lib/create/create.d.ts.map +1 -1
- package/lib/create/create.js +9 -9
- package/lib/create/create.js.map +1 -1
- package/lib/folders.js +6 -2
- package/lib/folders.js.map +1 -1
- package/lib/footer/index.js +4 -4
- package/lib/footer/index.js.map +1 -1
- package/lib/header/index.d.ts.map +1 -1
- package/lib/header/index.js +8 -11
- package/lib/header/index.js.map +1 -1
- package/lib/index.d.ts +4 -4
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +34 -27
- package/lib/index.js.map +1 -1
- package/lib/logic.d.ts +8 -0
- package/lib/logic.d.ts.map +1 -0
- package/lib/logic.js +79 -0
- package/lib/logic.js.map +1 -0
- package/lib/matrix/matrix.js +2 -2
- package/lib/matrix/matrix.js.map +1 -1
- package/lib/messageArea.js +10 -9
- package/lib/messageArea.js.map +1 -1
- package/lib/pad.js +2 -2
- package/lib/pad.js.map +1 -1
- package/lib/participation.d.ts.map +1 -1
- package/lib/participation.js +63 -33
- package/lib/participation.js.map +1 -1
- package/lib/preferences.js +8 -8
- package/lib/preferences.js.map +1 -1
- package/lib/table.js +3 -2
- package/lib/table.js.map +1 -1
- package/lib/tabs.js +3 -3
- package/lib/tabs.js.map +1 -1
- package/lib/utils/index.js +6 -6
- package/lib/utils/index.js.map +1 -1
- package/lib/utils/label.js +4 -4
- package/lib/utils/label.js.map +1 -1
- package/lib/versionInfo.js +9 -9
- package/lib/versionInfo.js.map +1 -1
- package/lib/webpack-bundle.js +84796 -68391
- package/lib/webpack-bundle.js.map +1 -1
- package/lib/widgets/buttons.js +16 -16
- package/lib/widgets/buttons.js.map +1 -1
- package/lib/widgets/forms/autocomplete/autocompleteBar.js +2 -2
- package/lib/widgets/forms/autocomplete/autocompleteBar.js.map +1 -1
- package/lib/widgets/forms/autocomplete/autocompleteField.js +2 -2
- package/lib/widgets/forms/autocomplete/autocompleteField.js.map +1 -1
- package/lib/widgets/forms/autocomplete/autocompletePicker.js +2 -2
- package/lib/widgets/forms/autocomplete/autocompletePicker.js.map +1 -1
- package/lib/widgets/forms/autocomplete/language.d.ts.map +1 -1
- package/lib/widgets/forms/autocomplete/language.js +11 -6
- package/lib/widgets/forms/autocomplete/language.js.map +1 -1
- package/lib/widgets/forms/autocomplete/publicData.d.ts +1 -1
- package/lib/widgets/forms/autocomplete/publicData.d.ts.map +1 -1
- package/lib/widgets/forms/autocomplete/publicData.js +22 -14
- package/lib/widgets/forms/autocomplete/publicData.js.map +1 -1
- package/lib/widgets/forms/basic.d.ts +1 -1
- package/lib/widgets/forms/basic.d.ts.map +1 -1
- package/lib/widgets/forms/basic.js +2 -2
- package/lib/widgets/forms/basic.js.map +1 -1
- package/lib/widgets/forms/comment.d.ts +1 -1
- package/lib/widgets/forms/comment.js +3 -3
- package/lib/widgets/forms/comment.js.map +1 -1
- package/lib/widgets/forms/fieldFunction.js +2 -2
- package/lib/widgets/forms/fieldFunction.js.map +1 -1
- package/lib/widgets/forms/formStyle.js +3 -3
- package/lib/widgets/forms/formStyle.js.map +1 -1
- package/lib/widgets/forms.js +10 -10
- package/lib/widgets/forms.js.map +1 -1
- package/lib/widgets/peoplePicker.js +2 -2
- package/lib/widgets/peoplePicker.js.map +1 -1
- package/package.json +2 -2
- package/lib/login/login.d.ts +0 -130
- package/lib/login/login.d.ts.map +0 -1
- package/lib/login/login.js +0 -1412
- package/lib/login/login.js.map +0 -1
- package/lib/signup/config-default.js.map +0 -1
- package/lib/signup/signup.js.map +0 -1
package/lib/chat/messageTools.js
CHANGED
|
@@ -19,8 +19,12 @@ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/sli
|
|
|
19
19
|
|
|
20
20
|
var debug = _interopRequireWildcard(require("../debug"));
|
|
21
21
|
|
|
22
|
+
var _index = require("../authn/index");
|
|
23
|
+
|
|
22
24
|
var _iconBase = require("../iconBase");
|
|
23
25
|
|
|
26
|
+
var _logic = require("../logic");
|
|
27
|
+
|
|
24
28
|
var ns = _interopRequireWildcard(require("../ns"));
|
|
25
29
|
|
|
26
30
|
var rdf = _interopRequireWildcard(require("rdflib"));
|
|
@@ -31,8 +35,6 @@ var widgets = _interopRequireWildcard(require("../widgets"));
|
|
|
31
35
|
|
|
32
36
|
var _bookmarks = require("./bookmarks");
|
|
33
37
|
|
|
34
|
-
var _solidLogic = require("solid-logic");
|
|
35
|
-
|
|
36
38
|
var _chatLogic = require("./chatLogic");
|
|
37
39
|
|
|
38
40
|
var _message = require("./message");
|
|
@@ -54,6 +56,9 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
|
|
|
54
56
|
// import * as pad from '../pad'
|
|
55
57
|
// pull in first avoid cross-refs
|
|
56
58
|
// import * as style from '../style'
|
|
59
|
+
// import { infiniteMessageArea } from './infinite.js'
|
|
60
|
+
// import { renderMessage, creatorAndDate } from './message'
|
|
61
|
+
// import * as debug from '../debug'
|
|
57
62
|
var dom = window.document; // THE UNUSED ICONS are here as reminders for possible future functionality
|
|
58
63
|
// const BOOKMARK_ICON = 'noun_45961.svg'
|
|
59
64
|
// const HEART_ICON = 'noun_130259.svg' -> Add this to my (private) favorites
|
|
@@ -82,9 +87,9 @@ emoji[ns.schema('LikeAction')] = '❤️';
|
|
|
82
87
|
function sentimentStrip(target, doc) {
|
|
83
88
|
// alain seems not used
|
|
84
89
|
var latest = (0, _chatLogic.mostRecentVersion)(target);
|
|
85
|
-
var actions =
|
|
90
|
+
var actions = _logic.store.holds(latest, ns.schema('dateDeleted').value, null, latest.doc()) ? _logic.store.each(null, ns.schema('target'), target, doc) : [];
|
|
86
91
|
var sentiments = actions.map(function (a) {
|
|
87
|
-
return
|
|
92
|
+
return _logic.store.any(a, ns.rdf('type'), null, doc);
|
|
88
93
|
});
|
|
89
94
|
sentiments.sort();
|
|
90
95
|
var strings = sentiments.map(function (x) {
|
|
@@ -105,9 +110,9 @@ function sentimentStripLinked(target, doc) {
|
|
|
105
110
|
|
|
106
111
|
function refresh() {
|
|
107
112
|
strip.innerHTML = '';
|
|
108
|
-
var actions = (0, _chatLogic.mostRecentVersion)(target).uri !== ns.schema('dateDeleted').uri ?
|
|
113
|
+
var actions = (0, _chatLogic.mostRecentVersion)(target).uri !== ns.schema('dateDeleted').uri ? _logic.store.each(null, ns.schema('target'), target, doc) : [];
|
|
109
114
|
var sentiments = actions.map(function (a) {
|
|
110
|
-
return [
|
|
115
|
+
return [_logic.store.any(a, ns.rdf('type'), null, doc), _logic.store.any(a, ns.schema('agent'), null, doc)];
|
|
111
116
|
});
|
|
112
117
|
sentiments.sort();
|
|
113
118
|
sentiments.forEach(function (ss) {
|
|
@@ -150,7 +155,7 @@ function messageToolbar(message, messageRow, userContext, channelObject) {
|
|
|
150
155
|
while (1) {
|
|
151
156
|
switch (_context2.prev = _context2.next) {
|
|
152
157
|
case 0:
|
|
153
|
-
author =
|
|
158
|
+
author = _logic.store.any(message, ns.foaf('maker'));
|
|
154
159
|
|
|
155
160
|
if (me) {
|
|
156
161
|
_context2.next = 5;
|
|
@@ -216,7 +221,7 @@ function messageToolbar(message, messageRow, userContext, channelObject) {
|
|
|
216
221
|
while (1) {
|
|
217
222
|
switch (_context3.prev = _context3.next) {
|
|
218
223
|
case 0:
|
|
219
|
-
if (me.value ===
|
|
224
|
+
if (me.value === _logic.store.any(message, ns.foaf('maker')).value) {
|
|
220
225
|
closeToolbar(); // edit is a one-off action
|
|
221
226
|
|
|
222
227
|
(0, _message.switchToEditor)(messageRow, message, channelObject, userContext);
|
|
@@ -252,7 +257,7 @@ function messageToolbar(message, messageRow, userContext, channelObject) {
|
|
|
252
257
|
switch (_context4.prev = _context4.next) {
|
|
253
258
|
case 0:
|
|
254
259
|
_context4.next = 2;
|
|
255
|
-
return
|
|
260
|
+
return _logic.store.updater.update(_logic.store.connectedStatements(x), []);
|
|
256
261
|
|
|
257
262
|
case 2:
|
|
258
263
|
case "end":
|
|
@@ -264,10 +269,10 @@ function messageToolbar(message, messageRow, userContext, channelObject) {
|
|
|
264
269
|
return _deleteThingThen.apply(this, arguments);
|
|
265
270
|
}
|
|
266
271
|
|
|
267
|
-
var me =
|
|
272
|
+
var me = _index.authn.currentUser(); // If already logged on
|
|
268
273
|
|
|
269
274
|
|
|
270
|
-
if (me &&
|
|
275
|
+
if (me && _logic.store.holds(message, ns.foaf('maker'), me)) {
|
|
271
276
|
// button to delete the message
|
|
272
277
|
div.appendChild(widgets.deleteButtonWithCheck(dom, div, 'message', deleteMessage)); // button to edit the message
|
|
273
278
|
|
|
@@ -330,7 +335,7 @@ function messageToolbar(message, messageRow, userContext, channelObject) {
|
|
|
330
335
|
action = widgets.newThing(doc);
|
|
331
336
|
insertMe = [rdf.st(action, ns.schema('agent'), context.me, doc), rdf.st(action, ns.rdf('type'), actionClass, doc), rdf.st(action, ns.schema('target'), target, doc)];
|
|
332
337
|
_context.next = 11;
|
|
333
|
-
return
|
|
338
|
+
return _logic.store.updater.update([], insertMe);
|
|
334
339
|
|
|
335
340
|
case 11:
|
|
336
341
|
setColor();
|
|
@@ -389,10 +394,10 @@ function messageToolbar(message, messageRow, userContext, channelObject) {
|
|
|
389
394
|
}());
|
|
390
395
|
|
|
391
396
|
function existingAction(actionClass) {
|
|
392
|
-
var actions =
|
|
393
|
-
return
|
|
397
|
+
var actions = _logic.store.each(null, ns.schema('agent'), context.me, doc).filter(function (x) {
|
|
398
|
+
return _logic.store.holds(x, ns.rdf('type'), actionClass, doc);
|
|
394
399
|
}).filter(function (x) {
|
|
395
|
-
return
|
|
400
|
+
return _logic.store.holds(x, ns.schema('target'), target, doc);
|
|
396
401
|
});
|
|
397
402
|
|
|
398
403
|
return actions.length ? actions[0] : null;
|
|
@@ -412,7 +417,7 @@ function messageToolbar(message, messageRow, userContext, channelObject) {
|
|
|
412
417
|
// https://schema.org/AgreeAction
|
|
413
418
|
|
|
414
419
|
|
|
415
|
-
me =
|
|
420
|
+
me = _index.authn.currentUser(); // If already logged on
|
|
416
421
|
// debug.log('Actions 3' + mostRecentVersion(message).value + ' ' + ns.schema('dateDeleted').value + ' ' + (mostRecentVersion(message).value !== ns.schema('dateDeleted').value))
|
|
417
422
|
|
|
418
423
|
if (me && (0, _chatLogic.mostRecentVersion)(message).value !== ns.schema('dateDeleted').value) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/chat/messageTools.js"],"names":["dom","window","document","PENCIL_ICON","THUMBS_UP_ICON","THUMBS_DOWN_ICON","emoji","ns","schema","sentimentStrip","target","doc","latest","actions","store","holds","value","each","sentiments","map","a","any","rdf","sort","strings","x","createTextNode","join","sentimentStripLinked","strip","createElement","refresh","innerHTML","uri","forEach","ss","theClass","agent","res","setAttribute","textContent","appendChild","messageToolbar","message","messageRow","userContext","channelObject","deleteMessage","author","foaf","me","alert","sameTerm","msg","debug","warn","area","statusArea","parentNode","widgets","errorMessageBlock","removeChild","closeToolbar","editMessage","div","parentElement","deleteThingThen","updater","update","connectedStatements","authn","currentUser","deleteButtonWithCheck","button","icons","iconBase","then","bookmarkButton","sentimentButton","context","icon","actionClass","mutuallyExclusive","setColor","style","backgroundColor","action","utils","label","_event","newThing","insertMe","st","dirty","i","length","existingAction","refreshTree","filter","context1","cancelButton","firstChild","opacity","addEventListener"],"mappings":";;;;;;;;;;;;;;;;;;;AASA;;AACA;;AAEA;;AAEA;;AAEA;;AACA;;AACA;;AACA;;AAEA;;AACA;;;;;;AAtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AAEA;AAC8B;AAC9B;AASA,IAAMA,GAAG,GAAGC,MAAM,CAACC,QAAnB,C,CAEA;AACA;AACA;AACA;AACA;AACA;;AACA,IAAMC,WAAW,GAAG,iBAApB,C,CAAsC;AACtC;;AACA,IAAMC,cAAc,GAAG,kBAAvB;AACA,IAAMC,gBAAgB,GAAG,kBAAzB;AACA;AACA;AACA;;AACA,IAAMC,KAAK,GAAG,EAAd;AACAA,KAAK,CAACC,EAAE,CAACC,MAAH,CAAU,aAAV,CAAD,CAAL,GAAkC,IAAlC;AACAF,KAAK,CAACC,EAAE,CAACC,MAAH,CAAU,gBAAV,CAAD,CAAL,GAAqC,IAArC;AACAF,KAAK,CAACC,EAAE,CAACC,MAAH,CAAU,eAAV,CAAD,CAAL,GAAoC,IAApC;AACAF,KAAK,CAACC,EAAE,CAACC,MAAH,CAAU,YAAV,CAAD,CAAL,GAAiC,IAAjC;AAEA;AACA;AACA;;AACO,SAASC,cAAT,CAAyBC,MAAzB,EAAiCC,GAAjC,EAAsC;AAAE;AAC7C,MAAMC,MAAM,GAAG,kCAAkBF,MAAlB,CAAf;AACA,MAAMG,OAAO,GAAGC,kBAAMC,KAAN,CAAYH,MAAZ,EAAoBL,EAAE,CAACC,MAAH,CAAU,aAAV,EAAyBQ,KAA7C,EAAoD,IAApD,EAA0DJ,MAAM,CAACD,GAAP,EAA1D,IAA0EG,kBAAMG,IAAN,CAAW,IAAX,EAAiBV,EAAE,CAACC,MAAH,CAAU,QAAV,CAAjB,EAAsCE,MAAtC,EAA8CC,GAA9C,CAA1E,GAA+H,EAA/I;AACA,MAAMO,UAAU,GAAGL,OAAO,CAACM,GAAR,CAAY,UAAAC,CAAC;AAAA,WAAIN,kBAAMO,GAAN,CAAUD,CAAV,EAAab,EAAE,CAACe,GAAH,CAAO,MAAP,CAAb,EAA6B,IAA7B,EAAmCX,GAAnC,CAAJ;AAAA,GAAb,CAAnB;AACAO,EAAAA,UAAU,CAACK,IAAX;AACA,MAAMC,OAAO,GAAGN,UAAU,CAACC,GAAX,CAAe,UAAAM,CAAC;AAAA,WAAInB,KAAK,CAACmB,CAAD,CAAL,IAAY,EAAhB;AAAA,GAAhB,CAAhB;AACA,SAAOzB,GAAG,CAAC0B,cAAJ,CAAmBF,OAAO,CAACG,IAAR,CAAa,GAAb,CAAnB,CAAP;AACD;AACD;AACA;AACA;AACA;AACA;AACA;;;AACO,SAASC,oBAAT,CAA+BlB,MAA/B,EAAuCC,GAAvC,EAA4C;AACjD,MAAMkB,KAAK,GAAG7B,GAAG,CAAC8B,aAAJ,CAAkB,MAAlB,CAAd;;AACA,WAASC,OAAT,GAAoB;AAClBF,IAAAA,KAAK,CAACG,SAAN,GAAkB,EAAlB;AACA,QAAMnB,OAAO,GAAI,kCAAkBH,MAAlB,EAA0BuB,GAA1B,KAAkC1B,EAAE,CAACC,MAAH,CAAU,aAAV,EAAyByB,GAA5D,GAAmEnB,kBAAMG,IAAN,CAAW,IAAX,EAAiBV,EAAE,CAACC,MAAH,CAAU,QAAV,CAAjB,EAAsCE,MAAtC,EAA8CC,GAA9C,CAAnE,GAAwH,EAAxI;AACA,QAAMO,UAAU,GAAGL,OAAO,CAACM,GAAR,CAAY,UAAAC,CAAC;AAAA,aAAI,CAClCN,kBAAMO,GAAN,CAAUD,CAAV,EAAab,EAAE,CAACe,GAAH,CAAO,MAAP,CAAb,EAA6B,IAA7B,EAAmCX,GAAnC,CADkC,EAElCG,kBAAMO,GAAN,CAAUD,CAAV,EAAab,EAAE,CAACC,MAAH,CAAU,OAAV,CAAb,EAAiC,IAAjC,EAAuCG,GAAvC,CAFkC,CAAJ;AAAA,KAAb,CAAnB;AAIAO,IAAAA,UAAU,CAACK,IAAX;AACAL,IAAAA,UAAU,CAACgB,OAAX,CAAmB,UAAAC,EAAE,EAAI;AACvB,gDAA0BA,EAA1B;AAAA,UAAOC,QAAP;AAAA,UAAiBC,KAAjB;;AACA,UAAIC,GAAJ;;AACA,UAAID,KAAJ,EAAW;AACTC,QAAAA,GAAG,GAAGtC,GAAG,CAAC8B,aAAJ,CAAkB,GAAlB,CAAN;AACAQ,QAAAA,GAAG,CAACC,YAAJ,CAAiB,MAAjB,EAAyBF,KAAK,CAACJ,GAA/B;AACD,OAHD,MAGO;AACLK,QAAAA,GAAG,GAAGtC,GAAG,CAAC0B,cAAJ,CAAmB,EAAnB,CAAN;AACD;;AACDY,MAAAA,GAAG,CAACE,WAAJ,GAAkBlC,KAAK,CAAC8B,QAAD,CAAL,IAAmB,GAArC;AACAP,MAAAA,KAAK,CAACY,WAAN,CAAkBH,GAAlB;AACD,KAXD;AAYD;;AACDP,EAAAA,OAAO;AACPF,EAAAA,KAAK,CAACE,OAAN,GAAgBA,OAAhB;AACA,SAAOF,KAAP;AACD;AACD;AACA;AACA;;;AACO,SAASa,cAAT,CAAyBC,OAAzB,EAAkCC,UAAlC,EAA8CC,WAA9C,EAA2DC,aAA3D,EAA0E;AAAA,WAChEC,aADgE;AAAA;AAAA;;AAAA;AAAA,mGAC/E;AAAA;AAAA;AAAA;AAAA;AAAA;AACQC,cAAAA,MADR,GACiBlC,kBAAMO,GAAN,CAAUsB,OAAV,EAAmBpC,EAAE,CAAC0C,IAAH,CAAQ,OAAR,CAAnB,CADjB;;AAAA,kBAEOC,EAFP;AAAA;AAAA;AAAA;;AAGIC,cAAAA,KAAK,CAAC,uDAAD,CAAL;AAHJ;AAAA;;AAAA;AAAA,mBAIaD,EAAE,CAACE,QAAH,CAAYJ,MAAZ,CAJb;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA,qBAMYF,aAAa,CAACC,aAAd,CAA4BJ,OAA5B,CANZ;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAQYU,cAAAA,GARZ,GAQkB,yCARlB;AASMC,cAAAA,KAAK,CAACC,IAAN,CAAWF,GAAX;AACAF,cAAAA,KAAK,CAACE,GAAD,CAAL;AACMG,cAAAA,IAXZ,GAWmBX,WAAW,CAACY,UAAZ,IAA0Bb,UAAU,CAACc,UAXxD;AAYMF,cAAAA,IAAI,CAACf,WAAL,CAAiBkB,OAAO,CAACC,iBAAR,CAA0B5D,GAA1B,EAA+BqD,GAA/B,CAAjB;;AAZN;AAcIT,cAAAA,UAAU,CAACc,UAAX,CAAsBG,WAAtB,CAAkCjB,UAAlC;AAdJ;AAAA;;AAAA;AAgBIO,cAAAA,KAAK,CAAC,yEAAyEH,MAA1E,CAAL;;AAhBJ;AAkBEc,cAAAA,YAAY;;AAlBd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAD+E;AAAA;AAAA;;AAAA,WAsBhEC,WAtBgE;AAAA;AAAA,IA6B/E;;;AA7B+E;AAAA,iGAsB/E,kBAA4BnB,UAA5B;AAAA;AAAA;AAAA;AAAA;AACE,kBAAIM,EAAE,CAAClC,KAAH,KAAaF,kBAAMO,GAAN,CAAUsB,OAAV,EAAmBpC,EAAE,CAAC0C,IAAH,CAAQ,OAAR,CAAnB,EAAqCjC,KAAtD,EAA6D;AAC3D8C,gBAAAA,YAAY,GAD+C,CAC5C;;AACf,6CAAelB,UAAf,EAA2BD,OAA3B,EAAoCG,aAApC,EAAmDD,WAAnD;AACD;;AAJH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAtB+E;AAAA;AAAA;;AA+B/E,MAAMmB,GAAG,GAAGhE,GAAG,CAAC8B,aAAJ,CAAkB,KAAlB,CAAZ,CA/B+E,CAgC/E;;AACA,MAAI,kCAAkBa,OAAlB,EAA2B3B,KAA3B,KAAqCT,EAAE,CAACC,MAAH,CAAU,aAAV,EAAyBQ,KAAlE,EAAyE,OAAOgD,GAAP;;AACzE,WAASF,YAAT,GAAyB;AACvBE,IAAAA,GAAG,CAACC,aAAJ,CAAkBA,aAAlB,CAAgCJ,WAAhC,CAA4CG,GAAG,CAACC,aAAhD,EADuB,CACwC;AAChE;;AApC8E,WAsChEC,eAtCgE;AAAA;AAAA,IA0C/E;;;AA1C+E;AAAA,qGAsC/E,kBAAgCzC,CAAhC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBACQX,kBAAMqD,OAAN,CAAcC,MAAd,CAAqBtD,kBAAMuD,mBAAN,CAA0B5C,CAA1B,CAArB,EAAmD,EAAnD,CADR;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAtC+E;AAAA;AAAA;;AA2C/E,MAAIyB,EAAE,GAAGoB,kBAAMC,WAAN,EAAT,CA3C+E,CA2ClD;;;AAC7B,MAAIrB,EAAE,IAAIpC,kBAAMC,KAAN,CAAY4B,OAAZ,EAAqBpC,EAAE,CAAC0C,IAAH,CAAQ,OAAR,CAArB,EAAuCC,EAAvC,CAAV,EAAsD;AACpD;AACAc,IAAAA,GAAG,CAACvB,WAAJ,CAAgBkB,OAAO,CAACa,qBAAR,CAA8BxE,GAA9B,EAAmCgE,GAAnC,EAAwC,SAAxC,EAAmDjB,aAAnD,CAAhB,EAFoD,CAGpD;;AACAiB,IAAAA,GAAG,CAACvB,WAAJ,CAAgBkB,OAAO,CAACc,MAAR,CAAezE,GAAf,EAAoB0E,gBAAMC,QAAN,GAAiBxE,WAArC,EAAkD,MAAlD,EAA0D;AAAA,aAAM4D,WAAW,CAACnB,UAAD,CAAjB;AAAA,KAA1D,CAAhB;AACD,GAjD8E,CAiD7E;AACF;;AACA;AACF;AACA;AACA;AACA;AACA;AACE;;;AAEA,wCAAsBC,WAAtB,EAAmC+B,IAAnC,CAAwC,UAAAC,cAAc,EAAI;AACxD,QAAIA,cAAJ,EAAoBb,GAAG,CAACvB,WAAJ,CAAgBoC,cAAhB;AACrB,GAFD;AAIA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACE,WAASC,eAAT,CACEC,OADF,EAEErE,MAFF,EAGEsE,IAHF,EAIEC,WAJF,EAKEtE,GALF,EAMEuE,iBANF,EAOE;AACA,aAASC,QAAT,GAAqB;AACnBV,MAAAA,MAAM,CAACW,KAAP,CAAaC,eAAb,GAA+BC,MAAM,GAAG,QAAH,GAAc,OAAnD;AACD;;AACD,QAAMb,MAAM,GAAGd,OAAO,CAACc,MAAR,CACbzE,GADa,EAEbgF,IAFa,EAGbO,KAAK,CAACC,KAAN,CAAYP,WAAZ,CAHa;AAAA,+FAIb,iBAAgBQ,MAAhB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBACMH,MADN;AAAA;AAAA;AAAA;;AAAA;AAAA,uBAEUpB,eAAe,CAACoB,MAAD,CAFzB;;AAAA;AAGIA,gBAAAA,MAAM,GAAG,IAAT;AACAH,gBAAAA,QAAQ;AAJZ;AAAA;;AAAA;AAMI;AACAG,gBAAAA,MAAM,GAAG3B,OAAO,CAAC+B,QAAR,CAAiB/E,GAAjB,CAAT;AACMgF,gBAAAA,QARV,GAQqB,CACfrE,GAAG,CAACsE,EAAJ,CAAON,MAAP,EAAe/E,EAAE,CAACC,MAAH,CAAU,OAAV,CAAf,EAAmCuE,OAAO,CAAC7B,EAA3C,EAA+CvC,GAA/C,CADe,EAEfW,GAAG,CAACsE,EAAJ,CAAON,MAAP,EAAe/E,EAAE,CAACe,GAAH,CAAO,MAAP,CAAf,EAA+B2D,WAA/B,EAA4CtE,GAA5C,CAFe,EAGfW,GAAG,CAACsE,EAAJ,CAAON,MAAP,EAAe/E,EAAE,CAACC,MAAH,CAAU,QAAV,CAAf,EAAoCE,MAApC,EAA4CC,GAA5C,CAHe,CARrB;AAAA;AAAA,uBAaUG,kBAAMqD,OAAN,CAAcC,MAAd,CAAqB,EAArB,EAAyBuB,QAAzB,CAbV;;AAAA;AAcIR,gBAAAA,QAAQ;;AAdZ,qBAgBQD,iBAhBR;AAAA;AAAA;AAAA;;AAiBM;AACIW,gBAAAA,KAlBV,GAkBkB,KAlBlB;AAmBeC,gBAAAA,CAnBf,GAmBmB,CAnBnB;;AAAA;AAAA,sBAmBsBA,CAAC,GAAGZ,iBAAiB,CAACa,MAnB5C;AAAA;AAAA;AAAA;;AAoBc3E,gBAAAA,CApBd,GAoBkB4E,cAAc,CAACd,iBAAiB,CAACY,CAAD,CAAlB,CApBhC;;AAAA,qBAqBY1E,CArBZ;AAAA;AAAA;AAAA;;AAAA;AAAA,uBAsBgB8C,eAAe,CAAC9C,CAAD,CAtB/B;;AAAA;AAsBmC;AACzByE,gBAAAA,KAAK,GAAG,IAAR;;AAvBV;AAmBoDC,gBAAAA,CAAC,EAnBrD;AAAA;AAAA;;AAAA;AA0BM,oBAAID,KAAJ,EAAW;AACT;AACAlC,kBAAAA,OAAO,CAACsC,WAAR,CAAoBrD,UAApB,EAFS,CAEuB;AACjC;;AA7BP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAJa;;AAAA;AAAA;AAAA;AAAA,QAAf;;AAsCA,aAASoD,cAAT,CAAyBf,WAAzB,EAAsC;AACpC,UAAMpE,OAAO,GAAGC,kBACbG,IADa,CACR,IADQ,EACFV,EAAE,CAACC,MAAH,CAAU,OAAV,CADE,EACkBuE,OAAO,CAAC7B,EAD1B,EAC8BvC,GAD9B,EAEbuF,MAFa,CAEN,UAAAzE,CAAC;AAAA,eAAIX,kBAAMC,KAAN,CAAYU,CAAZ,EAAelB,EAAE,CAACe,GAAH,CAAO,MAAP,CAAf,EAA+B2D,WAA/B,EAA4CtE,GAA5C,CAAJ;AAAA,OAFK,EAGbuF,MAHa,CAGN,UAAAzE,CAAC;AAAA,eAAIX,kBAAMC,KAAN,CAAYU,CAAZ,EAAelB,EAAE,CAACC,MAAH,CAAU,QAAV,CAAf,EAAoCE,MAApC,EAA4CC,GAA5C,CAAJ;AAAA,OAHK,CAAhB;;AAIA,aAAOE,OAAO,CAACkF,MAAR,GAAiBlF,OAAO,CAAC,CAAD,CAAxB,GAA8B,IAArC;AACD;;AACD,aAASkB,OAAT,GAAoB;AAClBuD,MAAAA,MAAM,GAAGU,cAAc,CAACf,WAAD,CAAvB;AACAE,MAAAA,QAAQ;AACT;;AACD,QAAIG,MAAJ;AACAb,IAAAA,MAAM,CAAC1C,OAAP,GAAiBA,OAAjB,CAtDA,CAsDyB;;AACzBA,IAAAA,OAAO;AACP,WAAO0C,MAAP;AACD,GAxI8E,CA0I/E;AACA;;;AACAvB,EAAAA,EAAE,GAAGoB,kBAAMC,WAAN,EAAL,CA5I+E,CA4ItD;AACzB;;AAEA,MAAIrB,EAAE,IAAK,kCAAkBP,OAAlB,EAA2B3B,KAA3B,KAAqCT,EAAE,CAACC,MAAH,CAAU,aAAV,EAAyBQ,KAAzE,EAAiF;AAC/E,QAAMmF,QAAQ,GAAG;AAAEjD,MAAAA,EAAE,EAAFA,EAAF;AAAMlD,MAAAA,GAAG,EAAHA,GAAN;AAAWgE,MAAAA,GAAG,EAAHA;AAAX,KAAjB;AACAA,IAAAA,GAAG,CAACvB,WAAJ,CACEqC,eAAe,CACbqB,QADa,EAEbxD,OAFa,EAEJ;AACT+B,oBAAMC,QAAN,GAAiBvE,cAHJ,EAIbG,EAAE,CAACC,MAAH,CAAU,aAAV,CAJa,EAKbmC,OAAO,CAAChC,GAAR,EALa,EAMb,CAACJ,EAAE,CAACC,MAAH,CAAU,gBAAV,CAAD,CANa,CADjB,EAF+E,CAY/E;;AACAwD,IAAAA,GAAG,CAACvB,WAAJ,CACEqC,eAAe,CACbqB,QADa,EAEbxD,OAFa,EAGb+B,gBAAMC,QAAN,GAAiBtE,gBAHJ,EAIbE,EAAE,CAACC,MAAH,CAAU,gBAAV,CAJa,EAKbmC,OAAO,CAAChC,GAAR,EALa,EAMb,CAACJ,EAAE,CAACC,MAAH,CAAU,aAAV,CAAD,CANa,CADjB;AAUD,GAtK8E,CAuK/E;;;AACA,MAAM4F,YAAY,GAAGpC,GAAG,CAACvB,WAAJ,CAAgBkB,OAAO,CAACyC,YAAR,CAAqBpG,GAArB,CAAhB,CAArB;AACAoG,EAAAA,YAAY,CAAChB,KAAb,YAA2B,OAA3B;AACAgB,EAAAA,YAAY,CAACC,UAAb,CAAwBjB,KAAxB,CAA8BkB,OAA9B,GAAwC,KAAxC;AACAF,EAAAA,YAAY,CAACG,gBAAb,CAA8B,OAA9B,EAAuCzC,YAAvC;AACA,SAAOE,GAAP;AACD","sourcesContent":["/**\n * Tools for doing things with a message\n * Let us be creative here. Allow all sorts of things to\n * be done to a message - linking to new or old objects in an open way\n *\n * Ideas: Bookmark, Like, star, pin at top of chat, reply as new thread,\n * If you made it originally: edit, delete, attach\n * @packageDocumentation\n */\nimport * as debug from '../debug'\nimport { icons } from '../iconBase'\n// import { media } from '../media/index'\nimport * as ns from '../ns'\n// import * as pad from '../pad'\nimport * as rdf from 'rdflib' // pull in first avoid cross-refs\n// import * as style from '../style'\nimport * as utils from '../utils'\nimport * as widgets from '../widgets'\nimport { renderBookmarksButton } from './bookmarks'\nimport { authn, store } from 'solid-logic'\n\nimport { mostRecentVersion } from './chatLogic'\nimport { switchToEditor } from './message'\n\nconst dom = window.document\n\n// THE UNUSED ICONS are here as reminders for possible future functionality\n// const BOOKMARK_ICON = 'noun_45961.svg'\n// const HEART_ICON = 'noun_130259.svg' -> Add this to my (private) favorites\n// const MENU_ICON = 'noun_897914.svg'\n// const PAPERCLIP_ICON = 'noun_25830.svg' -> add attachments to this message\n// const PIN_ICON = 'noun_562340.svg' -> pin this message permanently in the chat UI\nconst PENCIL_ICON = 'noun_253504.svg' // edit a message\n// const SPANNER_ICON = 'noun_344563.svg' -> settings\nconst THUMBS_UP_ICON = 'noun_1384132.svg'\nconst THUMBS_DOWN_ICON = 'noun_1384135.svg'\n/**\n * Emoji in Unicode\n */\nconst emoji = {}\nemoji[ns.schema('AgreeAction')] = '👍'\nemoji[ns.schema('DisagreeAction')] = '👎'\nemoji[ns.schema('EndorseAction')] = '⭐️'\nemoji[ns.schema('LikeAction')] = '❤️'\n\n/**\n * Create strip of sentiments expressed\n */\nexport function sentimentStrip (target, doc) { // alain seems not used\n const latest = mostRecentVersion(target)\n const actions = store.holds(latest, ns.schema('dateDeleted').value, null, latest.doc()) ? store.each(null, ns.schema('target'), target, doc) : []\n const sentiments = actions.map(a => store.any(a, ns.rdf('type'), null, doc))\n sentiments.sort()\n const strings = sentiments.map(x => emoji[x] || '')\n return dom.createTextNode(strings.join(' '))\n}\n/**\n * Create strip of sentiments expressed, with hyperlinks\n *\n * @param target {NamedNode} - The thing about which they are expressed\n * @param doc {NamedNode} - The document in which they are expressed\n */\nexport function sentimentStripLinked (target, doc) {\n const strip = dom.createElement('span')\n function refresh () {\n strip.innerHTML = ''\n const actions = (mostRecentVersion(target).uri !== ns.schema('dateDeleted').uri) ? store.each(null, ns.schema('target'), target, doc) : []\n const sentiments = actions.map(a => [\n store.any(a, ns.rdf('type'), null, doc),\n store.any(a, ns.schema('agent'), null, doc)\n ])\n sentiments.sort()\n sentiments.forEach(ss => {\n const [theClass, agent] = ss\n let res\n if (agent) {\n res = dom.createElement('a')\n res.setAttribute('href', agent.uri)\n } else {\n res = dom.createTextNode('')\n }\n res.textContent = emoji[theClass] || '*'\n strip.appendChild(res)\n })\n }\n refresh()\n strip.refresh = refresh\n return strip\n}\n/**\n * Creates a message toolbar component\n */\nexport function messageToolbar (message, messageRow, userContext, channelObject) {\n async function deleteMessage () {\n const author = store.any(message, ns.foaf('maker'))\n if (!me) {\n alert('You can\\'t delete the message, you are not logged in.')\n } else if (me.sameTerm(author)) {\n try {\n await channelObject.deleteMessage(message)\n } catch (err) {\n const msg = 'Error deleting messaage ' + err\n debug.warn(msg)\n alert(msg)\n const area = userContext.statusArea || messageRow.parentNode\n area.appendChild(widgets.errorMessageBlock(dom, msg))\n }\n messageRow.parentNode.removeChild(messageRow)\n } else {\n alert('You can\\'t delete the message, you are not logged in as the author, ' + author)\n }\n closeToolbar()\n }\n\n async function editMessage (messageRow) {\n if (me.value === store.any(message, ns.foaf('maker')).value) {\n closeToolbar() // edit is a one-off action\n switchToEditor(messageRow, message, channelObject, userContext)\n }\n }\n\n // alain TODO allow chat owner to fully delete message + sentiments and replacing messages\n\n const div = dom.createElement('div')\n // is message deleted ?\n if (mostRecentVersion(message).value === ns.schema('dateDeleted').value) return div\n function closeToolbar () {\n div.parentElement.parentElement.removeChild(div.parentElement) // remive the TR\n }\n\n async function deleteThingThen (x) {\n await store.updater.update(store.connectedStatements(x), [])\n }\n\n // Things only the original author can do\n let me = authn.currentUser() // If already logged on\n if (me && store.holds(message, ns.foaf('maker'), me)) {\n // button to delete the message\n div.appendChild(widgets.deleteButtonWithCheck(dom, div, 'message', deleteMessage))\n // button to edit the message\n div.appendChild(widgets.button(dom, icons.iconBase + PENCIL_ICON, 'edit', () => editMessage(messageRow)))\n } // if mine\n // Things anyone can do if they have a bookmark list async\n /*\n var bookmarkButton = await bookmarks.renderBookmarksButton(userContext)\n if (bookmarkButton) {\n div.appendChild(bookmarkButton)\n }\n */\n // Things anyone can do if they have a bookmark list\n\n renderBookmarksButton(userContext).then(bookmarkButton => {\n if (bookmarkButton) div.appendChild(bookmarkButton)\n })\n\n /** Button to allow user to express a sentiment (like, endorse, etc) about a target\n *\n * @param context {Object} - Provide dom and me\n * @param target {NamedNode} - The thing the user expresses an opnion about\n * @param icon {uristring} - The icon to be used for the button\n * @param actionClass {NamedNode} - The RDF class - typically a subclass of schema:Action\n * @param doc - {NamedNode} - the Solid document iunto which the data should be written\n * @param mutuallyExclusive {Array<NamedNode>} - Any RDF classes of sentimentswhich are mutiually exclusive\n */\n function sentimentButton (\n context,\n target,\n icon,\n actionClass,\n doc,\n mutuallyExclusive\n ) {\n function setColor () {\n button.style.backgroundColor = action ? 'yellow' : 'white'\n }\n const button = widgets.button(\n dom,\n icon,\n utils.label(actionClass),\n async function (_event) {\n if (action) {\n await deleteThingThen(action)\n action = null\n setColor()\n } else {\n // no action\n action = widgets.newThing(doc)\n const insertMe = [\n rdf.st(action, ns.schema('agent'), context.me, doc),\n rdf.st(action, ns.rdf('type'), actionClass, doc),\n rdf.st(action, ns.schema('target'), target, doc)\n ]\n await store.updater.update([], insertMe)\n setColor()\n\n if (mutuallyExclusive) {\n // Delete incompative sentiments\n let dirty = false\n for (let i = 0; i < mutuallyExclusive.length; i++) {\n const a = existingAction(mutuallyExclusive[i])\n if (a) {\n await deleteThingThen(a) // but how refresh? refreshTree the parent?\n dirty = true\n }\n }\n if (dirty) {\n // widgets.refreshTree(button.parentNode) // requires them all to be immediate siblings\n widgets.refreshTree(messageRow) // requires them all to be immediate siblings\n }\n }\n }\n }\n )\n function existingAction (actionClass) {\n const actions = store\n .each(null, ns.schema('agent'), context.me, doc)\n .filter(x => store.holds(x, ns.rdf('type'), actionClass, doc))\n .filter(x => store.holds(x, ns.schema('target'), target, doc))\n return actions.length ? actions[0] : null\n }\n function refresh () {\n action = existingAction(actionClass)\n setColor()\n }\n let action\n button.refresh = refresh // If the file changes, refresh live\n refresh()\n return button\n }\n\n // THUMBS_UP_ICON\n // https://schema.org/AgreeAction\n me = authn.currentUser() // If already logged on\n // debug.log('Actions 3' + mostRecentVersion(message).value + ' ' + ns.schema('dateDeleted').value + ' ' + (mostRecentVersion(message).value !== ns.schema('dateDeleted').value))\n\n if (me && (mostRecentVersion(message).value !== ns.schema('dateDeleted').value)) {\n const context1 = { me, dom, div }\n div.appendChild(\n sentimentButton(\n context1,\n message, // @@ TODO use widgets.sentimentButton\n icons.iconBase + THUMBS_UP_ICON,\n ns.schema('AgreeAction'),\n message.doc(),\n [ns.schema('DisagreeAction')]\n )\n )\n // Thumbs down\n div.appendChild(\n sentimentButton(\n context1,\n message,\n icons.iconBase + THUMBS_DOWN_ICON,\n ns.schema('DisagreeAction'),\n message.doc(),\n [ns.schema('AgreeAction')]\n )\n )\n }\n // X button to remove the tool UI itself\n const cancelButton = div.appendChild(widgets.cancelButton(dom))\n cancelButton.style.float = 'right'\n cancelButton.firstChild.style.opacity = '0.3'\n cancelButton.addEventListener('click', closeToolbar)\n return div\n}\n"],"file":"messageTools.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/chat/messageTools.js"],"names":["dom","window","document","PENCIL_ICON","THUMBS_UP_ICON","THUMBS_DOWN_ICON","emoji","ns","schema","sentimentStrip","target","doc","latest","actions","store","holds","value","each","sentiments","map","a","any","rdf","sort","strings","x","createTextNode","join","sentimentStripLinked","strip","createElement","refresh","innerHTML","uri","forEach","ss","theClass","agent","res","setAttribute","textContent","appendChild","messageToolbar","message","messageRow","userContext","channelObject","deleteMessage","author","foaf","me","alert","sameTerm","msg","debug","warn","area","statusArea","parentNode","widgets","errorMessageBlock","removeChild","closeToolbar","editMessage","div","parentElement","deleteThingThen","updater","update","connectedStatements","authn","currentUser","deleteButtonWithCheck","button","icons","iconBase","then","bookmarkButton","sentimentButton","context","icon","actionClass","mutuallyExclusive","setColor","style","backgroundColor","action","utils","label","_event","newThing","insertMe","st","dirty","i","length","existingAction","refreshTree","filter","context1","cancelButton","firstChild","opacity","addEventListener"],"mappings":"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","sourcesContent":["/**\n * Tools for doing things with a message\n * Let us be creative here. Allow all sorts of things to\n * be done to a message - linking to new or old objects in an open way\n *\n * Ideas: Bookmark, Like, star, pin at top of chat, reply as new thread,\n * If you made it originally: edit, delete, attach\n * @packageDocumentation\n */\nimport * as debug from '../debug'\nimport { authn } from '../authn/index'\nimport { icons } from '../iconBase'\nimport { store } from '../logic'\n// import { media } from '../media/index'\nimport * as ns from '../ns'\n// import * as pad from '../pad'\nimport * as rdf from 'rdflib' // pull in first avoid cross-refs\n// import * as style from '../style'\nimport * as utils from '../utils'\nimport * as widgets from '../widgets'\nimport { renderBookmarksButton } from './bookmarks'\nimport { mostRecentVersion } from './chatLogic'\nimport { switchToEditor } from './message'\n\n// import { infiniteMessageArea } from './infinite.js'\n// import { renderMessage, creatorAndDate } from './message'\n// import * as debug from '../debug'\n\nconst dom = window.document\n\n// THE UNUSED ICONS are here as reminders for possible future functionality\n// const BOOKMARK_ICON = 'noun_45961.svg'\n// const HEART_ICON = 'noun_130259.svg' -> Add this to my (private) favorites\n// const MENU_ICON = 'noun_897914.svg'\n// const PAPERCLIP_ICON = 'noun_25830.svg' -> add attachments to this message\n// const PIN_ICON = 'noun_562340.svg' -> pin this message permanently in the chat UI\nconst PENCIL_ICON = 'noun_253504.svg' // edit a message\n// const SPANNER_ICON = 'noun_344563.svg' -> settings\nconst THUMBS_UP_ICON = 'noun_1384132.svg'\nconst THUMBS_DOWN_ICON = 'noun_1384135.svg'\n/**\n * Emoji in Unicode\n */\nconst emoji = {}\nemoji[ns.schema('AgreeAction')] = '👍'\nemoji[ns.schema('DisagreeAction')] = '👎'\nemoji[ns.schema('EndorseAction')] = '⭐️'\nemoji[ns.schema('LikeAction')] = '❤️'\n\n/**\n * Create strip of sentiments expressed\n */\nexport function sentimentStrip (target, doc) { // alain seems not used\n const latest = mostRecentVersion(target)\n const actions = store.holds(latest, ns.schema('dateDeleted').value, null, latest.doc()) ? store.each(null, ns.schema('target'), target, doc) : []\n const sentiments = actions.map(a => store.any(a, ns.rdf('type'), null, doc))\n sentiments.sort()\n const strings = sentiments.map(x => emoji[x] || '')\n return dom.createTextNode(strings.join(' '))\n}\n/**\n * Create strip of sentiments expressed, with hyperlinks\n *\n * @param target {NamedNode} - The thing about which they are expressed\n * @param doc {NamedNode} - The document in which they are expressed\n */\nexport function sentimentStripLinked (target, doc) {\n const strip = dom.createElement('span')\n function refresh () {\n strip.innerHTML = ''\n const actions = (mostRecentVersion(target).uri !== ns.schema('dateDeleted').uri) ? store.each(null, ns.schema('target'), target, doc) : []\n const sentiments = actions.map(a => [\n store.any(a, ns.rdf('type'), null, doc),\n store.any(a, ns.schema('agent'), null, doc)\n ])\n sentiments.sort()\n sentiments.forEach(ss => {\n const [theClass, agent] = ss\n let res\n if (agent) {\n res = dom.createElement('a')\n res.setAttribute('href', agent.uri)\n } else {\n res = dom.createTextNode('')\n }\n res.textContent = emoji[theClass] || '*'\n strip.appendChild(res)\n })\n }\n refresh()\n strip.refresh = refresh\n return strip\n}\n/**\n * Creates a message toolbar component\n */\nexport function messageToolbar (message, messageRow, userContext, channelObject) {\n async function deleteMessage () {\n const author = store.any(message, ns.foaf('maker'))\n if (!me) {\n alert('You can\\'t delete the message, you are not logged in.')\n } else if (me.sameTerm(author)) {\n try {\n await channelObject.deleteMessage(message)\n } catch (err) {\n const msg = 'Error deleting messaage ' + err\n debug.warn(msg)\n alert(msg)\n const area = userContext.statusArea || messageRow.parentNode\n area.appendChild(widgets.errorMessageBlock(dom, msg))\n }\n messageRow.parentNode.removeChild(messageRow)\n } else {\n alert('You can\\'t delete the message, you are not logged in as the author, ' + author)\n }\n closeToolbar()\n }\n\n async function editMessage (messageRow) {\n if (me.value === store.any(message, ns.foaf('maker')).value) {\n closeToolbar() // edit is a one-off action\n switchToEditor(messageRow, message, channelObject, userContext)\n }\n }\n\n // alain TODO allow chat owner to fully delete message + sentiments and replacing messages\n\n const div = dom.createElement('div')\n // is message deleted ?\n if (mostRecentVersion(message).value === ns.schema('dateDeleted').value) return div\n function closeToolbar () {\n div.parentElement.parentElement.removeChild(div.parentElement) // remive the TR\n }\n\n async function deleteThingThen (x) {\n await store.updater.update(store.connectedStatements(x), [])\n }\n\n // Things only the original author can do\n let me = authn.currentUser() // If already logged on\n if (me && store.holds(message, ns.foaf('maker'), me)) {\n // button to delete the message\n div.appendChild(widgets.deleteButtonWithCheck(dom, div, 'message', deleteMessage))\n // button to edit the message\n div.appendChild(widgets.button(dom, icons.iconBase + PENCIL_ICON, 'edit', () => editMessage(messageRow)))\n } // if mine\n // Things anyone can do if they have a bookmark list async\n /*\n var bookmarkButton = await bookmarks.renderBookmarksButton(userContext)\n if (bookmarkButton) {\n div.appendChild(bookmarkButton)\n }\n */\n // Things anyone can do if they have a bookmark list\n\n renderBookmarksButton(userContext).then(bookmarkButton => {\n if (bookmarkButton) div.appendChild(bookmarkButton)\n })\n\n /** Button to allow user to express a sentiment (like, endorse, etc) about a target\n *\n * @param context {Object} - Provide dom and me\n * @param target {NamedNode} - The thing the user expresses an opnion about\n * @param icon {uristring} - The icon to be used for the button\n * @param actionClass {NamedNode} - The RDF class - typically a subclass of schema:Action\n * @param doc - {NamedNode} - the Solid document iunto which the data should be written\n * @param mutuallyExclusive {Array<NamedNode>} - Any RDF classes of sentimentswhich are mutiually exclusive\n */\n function sentimentButton (\n context,\n target,\n icon,\n actionClass,\n doc,\n mutuallyExclusive\n ) {\n function setColor () {\n button.style.backgroundColor = action ? 'yellow' : 'white'\n }\n const button = widgets.button(\n dom,\n icon,\n utils.label(actionClass),\n async function (_event) {\n if (action) {\n await deleteThingThen(action)\n action = null\n setColor()\n } else {\n // no action\n action = widgets.newThing(doc)\n const insertMe = [\n rdf.st(action, ns.schema('agent'), context.me, doc),\n rdf.st(action, ns.rdf('type'), actionClass, doc),\n rdf.st(action, ns.schema('target'), target, doc)\n ]\n await store.updater.update([], insertMe)\n setColor()\n\n if (mutuallyExclusive) {\n // Delete incompative sentiments\n let dirty = false\n for (let i = 0; i < mutuallyExclusive.length; i++) {\n const a = existingAction(mutuallyExclusive[i])\n if (a) {\n await deleteThingThen(a) // but how refresh? refreshTree the parent?\n dirty = true\n }\n }\n if (dirty) {\n // widgets.refreshTree(button.parentNode) // requires them all to be immediate siblings\n widgets.refreshTree(messageRow) // requires them all to be immediate siblings\n }\n }\n }\n }\n )\n function existingAction (actionClass) {\n const actions = store\n .each(null, ns.schema('agent'), context.me, doc)\n .filter(x => store.holds(x, ns.rdf('type'), actionClass, doc))\n .filter(x => store.holds(x, ns.schema('target'), target, doc))\n return actions.length ? actions[0] : null\n }\n function refresh () {\n action = existingAction(actionClass)\n setColor()\n }\n let action\n button.refresh = refresh // If the file changes, refresh live\n refresh()\n return button\n }\n\n // THUMBS_UP_ICON\n // https://schema.org/AgreeAction\n me = authn.currentUser() // If already logged on\n // debug.log('Actions 3' + mostRecentVersion(message).value + ' ' + ns.schema('dateDeleted').value + ' ' + (mostRecentVersion(message).value !== ns.schema('dateDeleted').value))\n\n if (me && (mostRecentVersion(message).value !== ns.schema('dateDeleted').value)) {\n const context1 = { me, dom, div }\n div.appendChild(\n sentimentButton(\n context1,\n message, // @@ TODO use widgets.sentimentButton\n icons.iconBase + THUMBS_UP_ICON,\n ns.schema('AgreeAction'),\n message.doc(),\n [ns.schema('DisagreeAction')]\n )\n )\n // Thumbs down\n div.appendChild(\n sentimentButton(\n context1,\n message,\n icons.iconBase + THUMBS_DOWN_ICON,\n ns.schema('DisagreeAction'),\n message.doc(),\n [ns.schema('AgreeAction')]\n )\n )\n }\n // X button to remove the tool UI itself\n const cancelButton = div.appendChild(widgets.cancelButton(dom))\n cancelButton.style.float = 'right'\n cancelButton.firstChild.style.opacity = '0.3'\n cancelButton.addEventListener('click', closeToolbar)\n return div\n}\n"],"file":"messageTools.js"}
|
package/lib/chat/thread.js
CHANGED
|
@@ -13,16 +13,16 @@ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"))
|
|
|
13
13
|
|
|
14
14
|
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
15
15
|
|
|
16
|
+
var _index = require("../authn/index");
|
|
17
|
+
|
|
16
18
|
var _iconBase = require("../iconBase");
|
|
17
19
|
|
|
18
|
-
var
|
|
20
|
+
var _logic = require("../logic");
|
|
19
21
|
|
|
20
|
-
var
|
|
22
|
+
var _index2 = require("../media/index");
|
|
21
23
|
|
|
22
24
|
var ns = _interopRequireWildcard(require("../ns"));
|
|
23
25
|
|
|
24
|
-
var login = _interopRequireWildcard(require("../login/login"));
|
|
25
|
-
|
|
26
26
|
var pad = _interopRequireWildcard(require("../pad"));
|
|
27
27
|
|
|
28
28
|
var $rdf = _interopRequireWildcard(require("rdflib"));
|
|
@@ -43,10 +43,12 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
|
|
|
43
43
|
*/
|
|
44
44
|
// pull in first avoid cross-refs
|
|
45
45
|
var UI = {
|
|
46
|
+
authn: _index.authn,
|
|
46
47
|
icons: _iconBase.icons,
|
|
47
48
|
ns: ns,
|
|
48
|
-
media:
|
|
49
|
+
media: _index2.media,
|
|
49
50
|
pad: pad,
|
|
51
|
+
store: _logic.store,
|
|
50
52
|
style: style,
|
|
51
53
|
utils: utils,
|
|
52
54
|
widgets: widgets
|
|
@@ -55,8 +57,8 @@ var UI = {
|
|
|
55
57
|
* HTML component for a chat thread
|
|
56
58
|
*/
|
|
57
59
|
|
|
58
|
-
function thread(dom,
|
|
59
|
-
|
|
60
|
+
function thread(dom, store, subject, messageStore, options) {
|
|
61
|
+
store = store || UI.store;
|
|
60
62
|
messageStore = messageStore.doc(); // No hash
|
|
61
63
|
|
|
62
64
|
var ns = UI.ns;
|
|
@@ -71,7 +73,7 @@ function thread(dom, kb, subject, messageStore, options) {
|
|
|
71
73
|
var messageTable; // Shared by initial build and addMessageFromBindings
|
|
72
74
|
|
|
73
75
|
var me;
|
|
74
|
-
var updater =
|
|
76
|
+
var updater = UI.store.updater;
|
|
75
77
|
|
|
76
78
|
var anchor = function anchor(text, term) {
|
|
77
79
|
// If there is no link return an element anyway
|
|
@@ -137,7 +139,7 @@ function thread(dom, kb, subject, messageStore, options) {
|
|
|
137
139
|
} else {
|
|
138
140
|
var bindings = {
|
|
139
141
|
'?msg': message,
|
|
140
|
-
'?content':
|
|
142
|
+
'?content': store.literal(field.value),
|
|
141
143
|
'?date': dateStamp,
|
|
142
144
|
'?creator': me
|
|
143
145
|
};
|
|
@@ -184,7 +186,7 @@ function thread(dom, kb, subject, messageStore, options) {
|
|
|
184
186
|
div: middle,
|
|
185
187
|
dom: dom
|
|
186
188
|
};
|
|
187
|
-
|
|
189
|
+
UI.authn.logIn(context).then(function (context) {
|
|
188
190
|
me = context.me;
|
|
189
191
|
turnOnInput();
|
|
190
192
|
});
|
|
@@ -259,7 +261,7 @@ function thread(dom, kb, subject, messageStore, options) {
|
|
|
259
261
|
var timestamp = '' + now.getTime();
|
|
260
262
|
var dateStamp = $rdf.term(now); // http://www.w3schools.com/jsref/jsref_obj_date.asp
|
|
261
263
|
|
|
262
|
-
var message =
|
|
264
|
+
var message = store.sym(messageStore.uri + '#' + 'Msg' + timestamp);
|
|
263
265
|
|
|
264
266
|
if (options === 'edit' || options === 'delete') {
|
|
265
267
|
sts.push(new $rdf.Statement(mostRecentVersion(oldMsg), DCT('isReplacedBy'), message, messageStore));
|
|
@@ -269,7 +271,7 @@ function thread(dom, kb, subject, messageStore, options) {
|
|
|
269
271
|
|
|
270
272
|
|
|
271
273
|
var msgBody = options !== 'delete' ? fieldValue : "message deleted\nby ".concat(nick(me));
|
|
272
|
-
sts.push(new $rdf.Statement(message, ns.sioc('content'),
|
|
274
|
+
sts.push(new $rdf.Statement(message, ns.sioc('content'), store.literal(msgBody), messageStore));
|
|
273
275
|
sts.push(new $rdf.Statement(message, DCT('created'), dateStamp, messageStore));
|
|
274
276
|
|
|
275
277
|
if (me) {
|
|
@@ -284,8 +286,7 @@ function thread(dom, kb, subject, messageStore, options) {
|
|
|
284
286
|
};
|
|
285
287
|
|
|
286
288
|
function nick(person) {
|
|
287
|
-
var s =
|
|
288
|
-
|
|
289
|
+
var s = UI.store.any(person, UI.ns.foaf('nick'));
|
|
289
290
|
if (s) return '' + s.value;
|
|
290
291
|
return '' + utils.label(person);
|
|
291
292
|
}
|
|
@@ -294,7 +295,7 @@ function thread(dom, kb, subject, messageStore, options) {
|
|
|
294
295
|
var nickAnchor = td1.appendChild(anchor(nick(creator), creator));
|
|
295
296
|
|
|
296
297
|
if (creator.uri) {
|
|
297
|
-
|
|
298
|
+
UI.store.fetcher.nowOrWhenFetched(creator.doc(), undefined, function (_ok, _body) {
|
|
298
299
|
nickAnchor.textContent = nick(creator);
|
|
299
300
|
});
|
|
300
301
|
}
|
|
@@ -314,8 +315,7 @@ function thread(dom, kb, subject, messageStore, options) {
|
|
|
314
315
|
}
|
|
315
316
|
}
|
|
316
317
|
|
|
317
|
-
var messages =
|
|
318
|
-
|
|
318
|
+
var messages = store.each(about, ns.wf('message'));
|
|
319
319
|
var stored = {};
|
|
320
320
|
messages.forEach(function (m) {
|
|
321
321
|
stored[m.uri] = true;
|
|
@@ -341,7 +341,7 @@ function thread(dom, kb, subject, messageStore, options) {
|
|
|
341
341
|
|
|
342
342
|
while (msg) {
|
|
343
343
|
// listMsg.push(msg)
|
|
344
|
-
msg =
|
|
344
|
+
msg = store.statementsMatching(message, DCT('isReplacedBy'));
|
|
345
345
|
}
|
|
346
346
|
|
|
347
347
|
return msg;
|
|
@@ -355,7 +355,7 @@ function thread(dom, kb, subject, messageStore, options) {
|
|
|
355
355
|
switch (_context.prev = _context.next) {
|
|
356
356
|
case 0:
|
|
357
357
|
_context.next = 2;
|
|
358
|
-
return
|
|
358
|
+
return store.connectedStatements(message, messageStore);
|
|
359
359
|
|
|
360
360
|
case 2:
|
|
361
361
|
deletions = _context.sent;
|
|
@@ -383,9 +383,9 @@ function thread(dom, kb, subject, messageStore, options) {
|
|
|
383
383
|
var addMessage = function addMessage(message) {
|
|
384
384
|
var bindings = {
|
|
385
385
|
'?msg': message,
|
|
386
|
-
'?creator':
|
|
387
|
-
'?date':
|
|
388
|
-
'?content':
|
|
386
|
+
'?creator': store.any(message, ns.foaf('maker')),
|
|
387
|
+
'?date': store.any(message, DCT('created')),
|
|
388
|
+
'?content': store.any(message, ns.sioc('content'))
|
|
389
389
|
};
|
|
390
390
|
renderMessage(bindings, true); // fresh from elsewhere
|
|
391
391
|
};
|
|
@@ -453,7 +453,7 @@ function thread(dom, kb, subject, messageStore, options) {
|
|
|
453
453
|
td3.removeChild(sureButton);
|
|
454
454
|
td3.removeChild(cancelButton); // deleteMessage(message) // alain or sendMessage(message, 'delete' or 'edit') //alain
|
|
455
455
|
|
|
456
|
-
if (me.value ===
|
|
456
|
+
if (me.value === store.any(message, ns.foaf('maker')).value) {
|
|
457
457
|
var _appendMsg2 = appendMsg(),
|
|
458
458
|
sts = _appendMsg2.sts; // alain
|
|
459
459
|
|
|
@@ -500,7 +500,7 @@ function thread(dom, kb, subject, messageStore, options) {
|
|
|
500
500
|
messageTable.fresh = true; // any new are fresh and so will be greenish
|
|
501
501
|
}
|
|
502
502
|
|
|
503
|
-
|
|
503
|
+
store.query(query, renderMessage, undefined, doneQuery);
|
|
504
504
|
|
|
505
505
|
div.refresh = function () {
|
|
506
506
|
syncMessages(subject, messageTable);
|
package/lib/chat/thread.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/chat/thread.js"],"names":["UI","icons","ns","media","pad","style","utils","widgets","thread","dom","kb","subject","messageStore","options","store","doc","WF","$rdf","Namespace","DCT","newestFirst","messageBodyStyle","div","createElement","messageTable","me","updater","anchor","text","term","a","uri","setAttribute","addEventListener","openHrefInOutlineMode","textContent","mention","message","pre","appendChild","createTextNode","announce","log","warn","error","newMessageForm","form","lhs","middle","rhs","AJAR_date","sendMessage","field","disabled","appendMsg","value","dateStamp","sts","sendComplete","success","body","errorMessageBlock","bindings","literal","renderMessage","update","sendButton","turnOnInput","creatorAndDate","innerHTML","rows","e","keyCode","altKey","button","iconBase","buttonStyle","context","login","logIn","then","fieldValue","oldMsg","now","Date","timestamp","getTime","sym","push","Statement","mostRecentVersion","wf","msgBody","nick","sioc","foaf","person","s","any","label","td1","creator","date","nickAnchor","fetcher","nowOrWhenFetched","undefined","_ok","_body","syncMessages","about","displayed","ele","ele2","firstChild","nextSibling","AJAR_subject","messages","each","stored","forEach","m","addMessage","removeChild","msg","statementsMatching","_deleteMessage","connectedStatements","deletions","ok","fresh","content","dateString","tr","done","insertBefore","shortDate","td2","td3","delButton","_event","cancelButton","sureButton","query","Query","v","vs","x","vars","variable","pat","add","dct","doneQuery","refresh"],"mappings":"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","sourcesContent":["/**\n * Contains the [[thread]] function\n * @packageDocumentation\n */\n\nimport { icons } from '../iconBase'\nimport { store } from 'solid-logic'\nimport { media } from '../media/index'\nimport * as ns from '../ns'\nimport * as login from '../login/login'\nimport * as pad from '../pad'\nimport * as $rdf from 'rdflib' // pull in first avoid cross-refs\nimport * as style from '../style'\nimport * as utils from '../utils'\nimport * as widgets from '../widgets'\n\nconst UI = { icons, ns, media, pad, style, utils, widgets }\n\n/**\n * HTML component for a chat thread\n */\nexport function thread (dom, kb, subject, messageStore, options) {\n kb = kb || store\n messageStore = messageStore.doc() // No hash\n const ns = UI.ns\n const WF = $rdf.Namespace('http://www.w3.org/2005/01/wf/flow#')\n const DCT = $rdf.Namespace('http://purl.org/dc/terms/')\n\n options = options || {}\n\n const newestFirst = !!options.newestFirst\n\n const messageBodyStyle =\n 'white-space: pre-wrap; width: 90%; font-size:100%; border: 0.07em solid #eee; padding: .2em 0.5em; margin: 0.1em 1em 0.1em 1em;'\n // 'font-size: 100%; margin: 0.1em 1em 0.1em 1em; background-color: white; white-space: pre-wrap; padding: 0.1em;'\n\n const div = dom.createElement('div')\n // eslint-disable-next-line prefer-const\n let messageTable // Shared by initial build and addMessageFromBindings\n\n let me\n\n const updater = store.updater\n\n const anchor = function (text, term) {\n // If there is no link return an element anyway\n const a = dom.createElement('a')\n if (term && term.uri) {\n a.setAttribute('href', term.uri)\n a.addEventListener('click', UI.widgets.openHrefInOutlineMode, true)\n a.setAttribute('style', 'color: #3B5998; text-decoration: none; ') // font-weight: bold\n }\n a.textContent = text\n return a\n }\n\n const mention = function mention (message, style) {\n const pre = dom.createElement('pre')\n pre.setAttribute('style', style || 'color: grey')\n div.appendChild(pre)\n pre.appendChild(dom.createTextNode(message))\n return pre\n }\n\n const announce = {\n log: function (message) {\n mention(message, 'color: #111;')\n },\n warn: function (message) {\n mention(message, 'color: #880;')\n },\n error: function (message) {\n mention(message, 'color: #800;')\n }\n }\n\n /**\n * Form for a new message\n */\n const newMessageForm = function () {\n const form = dom.createElement('tr')\n const lhs = dom.createElement('td')\n const middle = dom.createElement('td')\n const rhs = dom.createElement('td')\n form.appendChild(lhs)\n form.appendChild(middle)\n form.appendChild(rhs)\n form.AJAR_date = '9999-01-01T00:00:00Z' // ISO format for field sort\n\n const sendMessage = function () {\n // titlefield.setAttribute('class','pendingedit')\n // titlefield.disabled = true\n field.setAttribute('class', 'pendingedit')\n field.disabled = true\n const { message, dateStamp, sts } = appendMsg(field.value)\n\n const sendComplete = function (uri, success, body) {\n if (!success) {\n form.appendChild(\n UI.widgets.errorMessageBlock(dom, 'Error writing message: ' + body)\n )\n } else {\n const bindings = {\n '?msg': message,\n '?content': store.literal(field.value),\n '?date': dateStamp,\n '?creator': me\n }\n renderMessage(bindings, false) // not green\n\n field.value = '' // clear from out for reuse\n field.setAttribute('class', '')\n field.disabled = false\n }\n }\n updater.update([], sts, sendComplete)\n }\n form.appendChild(dom.createElement('br'))\n\n let field, sendButton\n const turnOnInput = function () {\n creatorAndDate(lhs, me, '', null)\n\n field = dom.createElement('textarea')\n middle.innerHTML = ''\n middle.appendChild(field)\n field.rows = 3\n // field.cols = 40\n field.setAttribute('style', messageBodyStyle + 'background-color: #eef;')\n\n field.addEventListener(\n 'keyup',\n function (e) {\n // User preference?\n if (e.keyCode === 13) {\n if (!e.altKey) {\n // Alt-Enter just adds a new line\n sendMessage()\n }\n }\n },\n false\n )\n\n rhs.innerHTML = ''\n sendButton = UI.widgets.button(\n dom,\n UI.icons.iconBase + 'noun_383448.svg',\n 'Send'\n )\n sendButton.setAttribute('style', UI.style.buttonStyle + 'float: right;')\n sendButton.addEventListener('click', sendMessage, false)\n rhs.appendChild(sendButton)\n }\n\n const context = { div: middle, dom: dom }\n login.logIn(context).then(context => {\n me = context.me\n turnOnInput()\n })\n\n return form\n }\n\n /* const sendMessage = function (oldMsg, options) { // alain\n // titlefield.setAttribute('class','pendingedit')\n // titlefield.disabled = true\n field.setAttribute('class', 'pendingedit')\n field.disabled = true\n const sts = []\n const now = new Date()\n const timestamp = '' + now.getTime()\n const dateStamp = $rdf.term(now)\n // http://www.w3schools.com/jsref/jsref_obj_date.asp\n const message = store.sym(messageStore.uri + '#' + 'Msg' + timestamp)\n\n if (options === 'edit' || options === 'delete') {\n sts.push(\n new $rdf.Statement(mostRecentVersion(oldMsg), DCT('isReplacedBy'), message, messageStore)\n )\n } else {\n sts.push(\n new $rdf.Statement(subject, ns.wf('message'), message, messageStore)\n )\n }\n // sts.push(new $rdf.Statement(message, ns.dc('title'), store.literal(titlefield.value), messageStore))\n const msgBody = options !== 'delete' ? field.value : `message deleted\\nby ${nick(me)}`\n sts.push(\n new $rdf.Statement(\n message,\n ns.sioc('content'),\n store.literal(msgBody),\n messageStore\n )\n )\n sts.push(\n new $rdf.Statement(message, DCT('created'), dateStamp, messageStore)\n )\n if (me) {\n sts.push(\n new $rdf.Statement(message, ns.foaf('maker'), me, messageStore)\n )\n }\n\n const sendComplete = function (uri, success, body) {\n if (!success) {\n form.appendChild(\n UI.widgets.errorMessageBlock(dom, 'Error writing message: ' + body)\n )\n } else {\n const bindings = {\n '?msg': message,\n '?content': store.literal(field.value),\n '?date': dateStamp,\n '?creator': me\n }\n renderMessage(bindings, false) // not green\n\n field.value = '' // clear from out for reuse\n field.setAttribute('class', '')\n field.disabled = false\n }\n }\n updater.update([], sts, sendComplete)\n } */\n\n const appendMsg = function (fieldValue, oldMsg = {}, options = '') { // alain\n const sts = []\n const now = new Date()\n const timestamp = '' + now.getTime()\n const dateStamp = $rdf.term(now)\n // http://www.w3schools.com/jsref/jsref_obj_date.asp\n const message = store.sym(messageStore.uri + '#' + 'Msg' + timestamp)\n\n if (options === 'edit' || options === 'delete') {\n sts.push(\n new $rdf.Statement(mostRecentVersion(oldMsg), DCT('isReplacedBy'), message, messageStore)\n )\n } else {\n sts.push(\n new $rdf.Statement(subject, ns.wf('message'), message, messageStore)\n )\n }\n // sts.push(new $rdf.Statement(message, ns.dc('title'), store.literal(titlefield.value), messageStore))\n const msgBody = options !== 'delete' ? fieldValue : `message deleted\\nby ${nick(me)}`\n sts.push(\n new $rdf.Statement(\n message,\n ns.sioc('content'),\n store.literal(msgBody),\n messageStore\n )\n )\n sts.push(\n new $rdf.Statement(message, DCT('created'), dateStamp, messageStore)\n )\n if (me) {\n sts.push(\n new $rdf.Statement(message, ns.foaf('maker'), me, messageStore)\n )\n }\n return { message, dateStamp, sts }\n }\n\n function nick (person) {\n const s = store.any(person, UI.ns.foaf('nick'))\n if (s) return '' + s.value\n return '' + utils.label(person)\n }\n\n function creatorAndDate (td1, creator, date, message) {\n const nickAnchor = td1.appendChild(anchor(nick(creator), creator))\n if (creator.uri) {\n store.fetcher.nowOrWhenFetched(creator.doc(), undefined, function (\n _ok,\n _body\n ) {\n nickAnchor.textContent = nick(creator)\n })\n }\n td1.appendChild(dom.createElement('br'))\n td1.appendChild(anchor(date, message))\n }\n\n // ///////////////////////////////////////////////////////////////////////\n\n function syncMessages (about, messageTable) {\n const displayed = {}\n let ele, ele2\n for (ele = messageTable.firstChild; ele; ele = ele.nextSibling) {\n if (ele.AJAR_subject) {\n displayed[ele.AJAR_subject.uri] = true\n }\n }\n const messages = store.each(about, ns.wf('message'))\n const stored = {}\n messages.forEach(function (m) {\n stored[m.uri] = true\n if (!displayed[m.uri]) {\n addMessage(m)\n }\n })\n\n // eslint-disable-next-line space-in-parens\n for (ele = messageTable.firstChild; ele; ) {\n ele2 = ele.nextSibling\n if (ele.AJAR_subject && !stored[ele.AJAR_subject.uri]) {\n messageTable.removeChild(ele)\n }\n ele = ele2\n }\n }\n\n const mostRecentVersion = function (message) {\n let msg = message\n // const listMsg = []\n while (msg) {\n // listMsg.push(msg)\n msg = store.statementsMatching(message, DCT('isReplacedBy'))\n }\n return msg\n }\n\n const _deleteMessage = async function (message) { // alain: must delete message and all linked with isReplacedBy\n // alain: check that me is not the author and ask for confirmation.\n const deletions = await store.connectedStatements(message, messageStore)\n updater.update(deletions, [], function (uri, ok, body) {\n if (!ok) {\n announce.error('Cant delete messages:' + body)\n } else {\n syncMessages(subject, messageTable)\n }\n })\n }\n\n const addMessage = function (message) {\n const bindings = {\n '?msg': message,\n '?creator': store.any(message, ns.foaf('maker')),\n '?date': store.any(message, DCT('created')),\n '?content': store.any(message, ns.sioc('content'))\n }\n renderMessage(bindings, true) // fresh from elsewhere\n }\n\n const renderMessage = function (bindings, fresh) {\n const creator = bindings['?creator']\n const message = bindings['?msg']\n const date = bindings['?date']\n const content = bindings['?content']\n\n const dateString = date.value\n const tr = dom.createElement('tr')\n tr.AJAR_date = dateString\n tr.AJAR_subject = message\n\n let done = false\n for (let ele = messageTable.firstChild; ; ele = ele.nextSibling) {\n if (!ele) {\n // empty\n break\n }\n if (\n (dateString > ele.AJAR_date && newestFirst) ||\n (dateString < ele.AJAR_date && !newestFirst)\n ) {\n messageTable.insertBefore(tr, ele)\n done = true\n break\n }\n }\n if (!done) {\n messageTable.appendChild(tr)\n }\n\n const td1 = dom.createElement('td')\n tr.appendChild(td1)\n creatorAndDate(td1, creator, UI.widgets.shortDate(dateString), message)\n\n const td2 = dom.createElement('td')\n tr.appendChild(td2)\n const pre = dom.createElement('p')\n pre.setAttribute(\n 'style',\n messageBodyStyle +\n (fresh ? 'background-color: #e8ffe8;' : 'background-color: #white;')\n )\n td2.appendChild(pre)\n pre.textContent = content.value\n\n const td3 = dom.createElement('td')\n tr.appendChild(td3)\n\n const delButton = dom.createElement('button')\n td3.appendChild(delButton)\n delButton.textContent = '-'\n\n tr.setAttribute('class', 'hoverControl') // See tabbedtab.css (sigh global CSS)\n delButton.setAttribute('class', 'hoverControlHide')\n delButton.setAttribute('style', 'color: red;')\n delButton.addEventListener(\n 'click',\n function (_event) {\n td3.removeChild(delButton) // Ask -- are you sure?\n const cancelButton = dom.createElement('button')\n cancelButton.textContent = 'cancel'\n td3.appendChild(cancelButton).addEventListener(\n 'click',\n function (_event) {\n td3.removeChild(sureButton)\n td3.removeChild(cancelButton)\n td3.appendChild(delButton)\n },\n false\n )\n const sureButton = dom.createElement('button')\n sureButton.textContent = 'Delete message'\n td3.appendChild(sureButton).addEventListener(\n 'click',\n function (_event) { // alain test for delete or edit depending on me = maker\n td3.removeChild(sureButton)\n td3.removeChild(cancelButton)\n // deleteMessage(message) // alain or sendMessage(message, 'delete' or 'edit') //alain\n if (me.value === store.any(message, ns.foaf('maker')).value) {\n const { sts } = appendMsg() // alain\n updater.update([], sts)\n }\n },\n false\n )\n },\n false\n )\n }\n\n // Messages with date, author etc\n\n messageTable = dom.createElement('table')\n messageTable.fresh = false\n div.appendChild(messageTable)\n messageTable.setAttribute('style', 'width: 100%;') // fill that div!\n\n const tr = newMessageForm()\n if (newestFirst) {\n messageTable.insertBefore(tr, messageTable.firstChild) // If newestFirst\n } else {\n messageTable.appendChild(tr) // not newestFirst\n }\n\n let query\n // Do this with a live query to pull in messages from web\n if (options.query) {\n query = options.query\n } else {\n query = new $rdf.Query('Messages')\n const v = {} // semicolon needed\n const vs = ['msg', 'date', 'creator', 'content']\n vs.forEach(function (x) {\n query.vars.push((v[x] = $rdf.variable(x)))\n })\n query.pat.add(subject, WF('message'), v.msg)\n query.pat.add(v.msg, ns.dct('created'), v.date)\n query.pat.add(v.msg, ns.foaf('maker'), v.creator)\n query.pat.add(v.msg, ns.sioc('content'), v.content)\n }\n\n function doneQuery () {\n messageTable.fresh = true // any new are fresh and so will be greenish\n }\n store.query(query, renderMessage, undefined, doneQuery)\n div.refresh = function () {\n syncMessages(subject, messageTable)\n }\n // syncMessages(subject, messageTable) // no the query will do this async\n return div\n}\n"],"file":"thread.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/chat/thread.js"],"names":["UI","authn","icons","ns","media","pad","store","style","utils","widgets","thread","dom","subject","messageStore","options","doc","WF","$rdf","Namespace","DCT","newestFirst","messageBodyStyle","div","createElement","messageTable","me","updater","anchor","text","term","a","uri","setAttribute","addEventListener","openHrefInOutlineMode","textContent","mention","message","pre","appendChild","createTextNode","announce","log","warn","error","newMessageForm","form","lhs","middle","rhs","AJAR_date","sendMessage","field","disabled","appendMsg","value","dateStamp","sts","sendComplete","success","body","errorMessageBlock","bindings","literal","renderMessage","update","sendButton","turnOnInput","creatorAndDate","innerHTML","rows","e","keyCode","altKey","button","iconBase","buttonStyle","context","logIn","then","fieldValue","oldMsg","now","Date","timestamp","getTime","sym","push","Statement","mostRecentVersion","wf","msgBody","nick","sioc","foaf","person","s","any","label","td1","creator","date","nickAnchor","fetcher","nowOrWhenFetched","undefined","_ok","_body","syncMessages","about","displayed","ele","ele2","firstChild","nextSibling","AJAR_subject","messages","each","stored","forEach","m","addMessage","removeChild","msg","statementsMatching","_deleteMessage","connectedStatements","deletions","ok","fresh","content","dateString","tr","done","insertBefore","shortDate","td2","td3","delButton","_event","cancelButton","sureButton","query","Query","v","vs","x","vars","variable","pat","add","dct","doneQuery","refresh"],"mappings":"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","sourcesContent":["/**\n * Contains the [[thread]] function\n * @packageDocumentation\n */\n\nimport { authn } from '../authn/index'\nimport { icons } from '../iconBase'\nimport { store } from '../logic'\nimport { media } from '../media/index'\nimport * as ns from '../ns'\nimport * as pad from '../pad'\nimport * as $rdf from 'rdflib' // pull in first avoid cross-refs\nimport * as style from '../style'\nimport * as utils from '../utils'\nimport * as widgets from '../widgets'\n\nconst UI = { authn, icons, ns, media, pad, store, style, utils, widgets }\n\n/**\n * HTML component for a chat thread\n */\nexport function thread (dom, store, subject, messageStore, options) {\n store = store || UI.store\n messageStore = messageStore.doc() // No hash\n const ns = UI.ns\n const WF = $rdf.Namespace('http://www.w3.org/2005/01/wf/flow#')\n const DCT = $rdf.Namespace('http://purl.org/dc/terms/')\n\n options = options || {}\n\n const newestFirst = !!options.newestFirst\n\n const messageBodyStyle =\n 'white-space: pre-wrap; width: 90%; font-size:100%; border: 0.07em solid #eee; padding: .2em 0.5em; margin: 0.1em 1em 0.1em 1em;'\n // 'font-size: 100%; margin: 0.1em 1em 0.1em 1em; background-color: white; white-space: pre-wrap; padding: 0.1em;'\n\n const div = dom.createElement('div')\n // eslint-disable-next-line prefer-const\n let messageTable // Shared by initial build and addMessageFromBindings\n\n let me\n\n const updater = UI.store.updater\n\n const anchor = function (text, term) {\n // If there is no link return an element anyway\n const a = dom.createElement('a')\n if (term && term.uri) {\n a.setAttribute('href', term.uri)\n a.addEventListener('click', UI.widgets.openHrefInOutlineMode, true)\n a.setAttribute('style', 'color: #3B5998; text-decoration: none; ') // font-weight: bold\n }\n a.textContent = text\n return a\n }\n\n const mention = function mention (message, style) {\n const pre = dom.createElement('pre')\n pre.setAttribute('style', style || 'color: grey')\n div.appendChild(pre)\n pre.appendChild(dom.createTextNode(message))\n return pre\n }\n\n const announce = {\n log: function (message) {\n mention(message, 'color: #111;')\n },\n warn: function (message) {\n mention(message, 'color: #880;')\n },\n error: function (message) {\n mention(message, 'color: #800;')\n }\n }\n\n /**\n * Form for a new message\n */\n const newMessageForm = function () {\n const form = dom.createElement('tr')\n const lhs = dom.createElement('td')\n const middle = dom.createElement('td')\n const rhs = dom.createElement('td')\n form.appendChild(lhs)\n form.appendChild(middle)\n form.appendChild(rhs)\n form.AJAR_date = '9999-01-01T00:00:00Z' // ISO format for field sort\n\n const sendMessage = function () {\n // titlefield.setAttribute('class','pendingedit')\n // titlefield.disabled = true\n field.setAttribute('class', 'pendingedit')\n field.disabled = true\n const { message, dateStamp, sts } = appendMsg(field.value)\n\n const sendComplete = function (uri, success, body) {\n if (!success) {\n form.appendChild(\n UI.widgets.errorMessageBlock(dom, 'Error writing message: ' + body)\n )\n } else {\n const bindings = {\n '?msg': message,\n '?content': store.literal(field.value),\n '?date': dateStamp,\n '?creator': me\n }\n renderMessage(bindings, false) // not green\n\n field.value = '' // clear from out for reuse\n field.setAttribute('class', '')\n field.disabled = false\n }\n }\n updater.update([], sts, sendComplete)\n }\n form.appendChild(dom.createElement('br'))\n\n let field, sendButton\n const turnOnInput = function () {\n creatorAndDate(lhs, me, '', null)\n\n field = dom.createElement('textarea')\n middle.innerHTML = ''\n middle.appendChild(field)\n field.rows = 3\n // field.cols = 40\n field.setAttribute('style', messageBodyStyle + 'background-color: #eef;')\n\n field.addEventListener(\n 'keyup',\n function (e) {\n // User preference?\n if (e.keyCode === 13) {\n if (!e.altKey) {\n // Alt-Enter just adds a new line\n sendMessage()\n }\n }\n },\n false\n )\n\n rhs.innerHTML = ''\n sendButton = UI.widgets.button(\n dom,\n UI.icons.iconBase + 'noun_383448.svg',\n 'Send'\n )\n sendButton.setAttribute('style', UI.style.buttonStyle + 'float: right;')\n sendButton.addEventListener('click', sendMessage, false)\n rhs.appendChild(sendButton)\n }\n\n const context = { div: middle, dom: dom }\n UI.authn.logIn(context).then(context => {\n me = context.me\n turnOnInput()\n })\n\n return form\n }\n\n /* const sendMessage = function (oldMsg, options) { // alain\n // titlefield.setAttribute('class','pendingedit')\n // titlefield.disabled = true\n field.setAttribute('class', 'pendingedit')\n field.disabled = true\n const sts = []\n const now = new Date()\n const timestamp = '' + now.getTime()\n const dateStamp = $rdf.term(now)\n // http://www.w3schools.com/jsref/jsref_obj_date.asp\n const message = store.sym(messageStore.uri + '#' + 'Msg' + timestamp)\n\n if (options === 'edit' || options === 'delete') {\n sts.push(\n new $rdf.Statement(mostRecentVersion(oldMsg), DCT('isReplacedBy'), message, messageStore)\n )\n } else {\n sts.push(\n new $rdf.Statement(subject, ns.wf('message'), message, messageStore)\n )\n }\n // sts.push(new $rdf.Statement(message, ns.dc('title'), store.literal(titlefield.value), messageStore))\n const msgBody = options !== 'delete' ? field.value : `message deleted\\nby ${nick(me)}`\n sts.push(\n new $rdf.Statement(\n message,\n ns.sioc('content'),\n store.literal(msgBody),\n messageStore\n )\n )\n sts.push(\n new $rdf.Statement(message, DCT('created'), dateStamp, messageStore)\n )\n if (me) {\n sts.push(\n new $rdf.Statement(message, ns.foaf('maker'), me, messageStore)\n )\n }\n\n const sendComplete = function (uri, success, body) {\n if (!success) {\n form.appendChild(\n UI.widgets.errorMessageBlock(dom, 'Error writing message: ' + body)\n )\n } else {\n const bindings = {\n '?msg': message,\n '?content': store.literal(field.value),\n '?date': dateStamp,\n '?creator': me\n }\n renderMessage(bindings, false) // not green\n\n field.value = '' // clear from out for reuse\n field.setAttribute('class', '')\n field.disabled = false\n }\n }\n updater.update([], sts, sendComplete)\n } */\n\n const appendMsg = function (fieldValue, oldMsg = {}, options = '') { // alain\n const sts = []\n const now = new Date()\n const timestamp = '' + now.getTime()\n const dateStamp = $rdf.term(now)\n // http://www.w3schools.com/jsref/jsref_obj_date.asp\n const message = store.sym(messageStore.uri + '#' + 'Msg' + timestamp)\n\n if (options === 'edit' || options === 'delete') {\n sts.push(\n new $rdf.Statement(mostRecentVersion(oldMsg), DCT('isReplacedBy'), message, messageStore)\n )\n } else {\n sts.push(\n new $rdf.Statement(subject, ns.wf('message'), message, messageStore)\n )\n }\n // sts.push(new $rdf.Statement(message, ns.dc('title'), store.literal(titlefield.value), messageStore))\n const msgBody = options !== 'delete' ? fieldValue : `message deleted\\nby ${nick(me)}`\n sts.push(\n new $rdf.Statement(\n message,\n ns.sioc('content'),\n store.literal(msgBody),\n messageStore\n )\n )\n sts.push(\n new $rdf.Statement(message, DCT('created'), dateStamp, messageStore)\n )\n if (me) {\n sts.push(\n new $rdf.Statement(message, ns.foaf('maker'), me, messageStore)\n )\n }\n return { message, dateStamp, sts }\n }\n\n function nick (person) {\n const s = UI.store.any(person, UI.ns.foaf('nick'))\n if (s) return '' + s.value\n return '' + utils.label(person)\n }\n\n function creatorAndDate (td1, creator, date, message) {\n const nickAnchor = td1.appendChild(anchor(nick(creator), creator))\n if (creator.uri) {\n UI.store.fetcher.nowOrWhenFetched(creator.doc(), undefined, function (\n _ok,\n _body\n ) {\n nickAnchor.textContent = nick(creator)\n })\n }\n td1.appendChild(dom.createElement('br'))\n td1.appendChild(anchor(date, message))\n }\n\n // ///////////////////////////////////////////////////////////////////////\n\n function syncMessages (about, messageTable) {\n const displayed = {}\n let ele, ele2\n for (ele = messageTable.firstChild; ele; ele = ele.nextSibling) {\n if (ele.AJAR_subject) {\n displayed[ele.AJAR_subject.uri] = true\n }\n }\n const messages = store.each(about, ns.wf('message'))\n const stored = {}\n messages.forEach(function (m) {\n stored[m.uri] = true\n if (!displayed[m.uri]) {\n addMessage(m)\n }\n })\n\n // eslint-disable-next-line space-in-parens\n for (ele = messageTable.firstChild; ele; ) {\n ele2 = ele.nextSibling\n if (ele.AJAR_subject && !stored[ele.AJAR_subject.uri]) {\n messageTable.removeChild(ele)\n }\n ele = ele2\n }\n }\n\n const mostRecentVersion = function (message) {\n let msg = message\n // const listMsg = []\n while (msg) {\n // listMsg.push(msg)\n msg = store.statementsMatching(message, DCT('isReplacedBy'))\n }\n return msg\n }\n\n const _deleteMessage = async function (message) { // alain: must delete message and all linked with isReplacedBy\n // alain: check that me is not the author and ask for confirmation.\n const deletions = await store.connectedStatements(message, messageStore)\n updater.update(deletions, [], function (uri, ok, body) {\n if (!ok) {\n announce.error('Cant delete messages:' + body)\n } else {\n syncMessages(subject, messageTable)\n }\n })\n }\n\n const addMessage = function (message) {\n const bindings = {\n '?msg': message,\n '?creator': store.any(message, ns.foaf('maker')),\n '?date': store.any(message, DCT('created')),\n '?content': store.any(message, ns.sioc('content'))\n }\n renderMessage(bindings, true) // fresh from elsewhere\n }\n\n const renderMessage = function (bindings, fresh) {\n const creator = bindings['?creator']\n const message = bindings['?msg']\n const date = bindings['?date']\n const content = bindings['?content']\n\n const dateString = date.value\n const tr = dom.createElement('tr')\n tr.AJAR_date = dateString\n tr.AJAR_subject = message\n\n let done = false\n for (let ele = messageTable.firstChild; ; ele = ele.nextSibling) {\n if (!ele) {\n // empty\n break\n }\n if (\n (dateString > ele.AJAR_date && newestFirst) ||\n (dateString < ele.AJAR_date && !newestFirst)\n ) {\n messageTable.insertBefore(tr, ele)\n done = true\n break\n }\n }\n if (!done) {\n messageTable.appendChild(tr)\n }\n\n const td1 = dom.createElement('td')\n tr.appendChild(td1)\n creatorAndDate(td1, creator, UI.widgets.shortDate(dateString), message)\n\n const td2 = dom.createElement('td')\n tr.appendChild(td2)\n const pre = dom.createElement('p')\n pre.setAttribute(\n 'style',\n messageBodyStyle +\n (fresh ? 'background-color: #e8ffe8;' : 'background-color: #white;')\n )\n td2.appendChild(pre)\n pre.textContent = content.value\n\n const td3 = dom.createElement('td')\n tr.appendChild(td3)\n\n const delButton = dom.createElement('button')\n td3.appendChild(delButton)\n delButton.textContent = '-'\n\n tr.setAttribute('class', 'hoverControl') // See tabbedtab.css (sigh global CSS)\n delButton.setAttribute('class', 'hoverControlHide')\n delButton.setAttribute('style', 'color: red;')\n delButton.addEventListener(\n 'click',\n function (_event) {\n td3.removeChild(delButton) // Ask -- are you sure?\n const cancelButton = dom.createElement('button')\n cancelButton.textContent = 'cancel'\n td3.appendChild(cancelButton).addEventListener(\n 'click',\n function (_event) {\n td3.removeChild(sureButton)\n td3.removeChild(cancelButton)\n td3.appendChild(delButton)\n },\n false\n )\n const sureButton = dom.createElement('button')\n sureButton.textContent = 'Delete message'\n td3.appendChild(sureButton).addEventListener(\n 'click',\n function (_event) { // alain test for delete or edit depending on me = maker\n td3.removeChild(sureButton)\n td3.removeChild(cancelButton)\n // deleteMessage(message) // alain or sendMessage(message, 'delete' or 'edit') //alain\n if (me.value === store.any(message, ns.foaf('maker')).value) {\n const { sts } = appendMsg() // alain\n updater.update([], sts)\n }\n },\n false\n )\n },\n false\n )\n }\n\n // Messages with date, author etc\n\n messageTable = dom.createElement('table')\n messageTable.fresh = false\n div.appendChild(messageTable)\n messageTable.setAttribute('style', 'width: 100%;') // fill that div!\n\n const tr = newMessageForm()\n if (newestFirst) {\n messageTable.insertBefore(tr, messageTable.firstChild) // If newestFirst\n } else {\n messageTable.appendChild(tr) // not newestFirst\n }\n\n let query\n // Do this with a live query to pull in messages from web\n if (options.query) {\n query = options.query\n } else {\n query = new $rdf.Query('Messages')\n const v = {} // semicolon needed\n const vs = ['msg', 'date', 'creator', 'content']\n vs.forEach(function (x) {\n query.vars.push((v[x] = $rdf.variable(x)))\n })\n query.pat.add(subject, WF('message'), v.msg)\n query.pat.add(v.msg, ns.dct('created'), v.date)\n query.pat.add(v.msg, ns.foaf('maker'), v.creator)\n query.pat.add(v.msg, ns.sioc('content'), v.content)\n }\n\n function doneQuery () {\n messageTable.fresh = true // any new are fresh and so will be greenish\n }\n store.query(query, renderMessage, undefined, doneQuery)\n div.refresh = function () {\n syncMessages(subject, messageTable)\n }\n // syncMessages(subject, messageTable) // no the query will do this async\n return div\n}\n"],"file":"thread.js"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/create/create.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/create/create.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,kBAAkB,EAAkB,cAAc,EAAE,MAAM,eAAe,CAAA;AAClF,OAAO,EAAE,aAAa,EAAyB,MAAM,SAAS,CAAA;AAW9D,wBAAgB,UAAU,CACxB,aAAa,EAAE,aAAa,EAC5B,kBAAkB,EAAE,kBAAkB,EACtC,QAAQ,EAAE,KAAK,CAAC,cAAc,CAAC,GAC9B,IAAI,CAqNN"}
|
package/lib/create/create.js
CHANGED
|
@@ -7,20 +7,20 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
});
|
|
8
8
|
exports.newThingUI = newThingUI;
|
|
9
9
|
|
|
10
|
-
var _solidLogic = require("solid-logic");
|
|
11
|
-
|
|
12
10
|
var debug = _interopRequireWildcard(require("../debug"));
|
|
13
11
|
|
|
14
12
|
var _iconBase = require("../iconBase");
|
|
15
13
|
|
|
16
|
-
var _login = require("../login/login");
|
|
17
|
-
|
|
18
|
-
var ns = _interopRequireWildcard(require("../ns"));
|
|
19
|
-
|
|
20
14
|
var utils = _interopRequireWildcard(require("../utils"));
|
|
21
15
|
|
|
22
16
|
var widgets = _interopRequireWildcard(require("../widgets"));
|
|
23
17
|
|
|
18
|
+
var _logic = require("../logic");
|
|
19
|
+
|
|
20
|
+
var ns = _interopRequireWildcard(require("../ns"));
|
|
21
|
+
|
|
22
|
+
var _authn = require("../authn/authn");
|
|
23
|
+
|
|
24
24
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
25
25
|
|
|
26
26
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
@@ -28,7 +28,7 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
|
|
|
28
28
|
/* create.js UI to craete new objects in the solid-app-set world
|
|
29
29
|
**
|
|
30
30
|
*/
|
|
31
|
-
var kb =
|
|
31
|
+
var kb = _logic.solidLogicSingleton.store;
|
|
32
32
|
/* newThingUI -- return UI for user to select a new object, folder, etc
|
|
33
33
|
**
|
|
34
34
|
** context must include: dom, div,
|
|
@@ -94,7 +94,7 @@ function newThingUI(createContext, dataBrowserContext, thePanes) {
|
|
|
94
94
|
var selectUI; // , selectUIParent
|
|
95
95
|
|
|
96
96
|
function callbackWS(ws, newBase) {
|
|
97
|
-
(0,
|
|
97
|
+
(0, _authn.logInLoadProfile)(createContext).then(function (_context) {
|
|
98
98
|
var newPaneOptions = Object.assign({
|
|
99
99
|
newBase: newBase,
|
|
100
100
|
folder: options.folder || undefined,
|
|
@@ -158,7 +158,7 @@ function newThingUI(createContext, dataBrowserContext, thePanes) {
|
|
|
158
158
|
|
|
159
159
|
if (!options.folder) {
|
|
160
160
|
// No folder given? Ask user for full URI
|
|
161
|
-
selectUI = (0,
|
|
161
|
+
selectUI = (0, _authn.selectWorkspace)(dom, {
|
|
162
162
|
noun: options.noun,
|
|
163
163
|
appPathSegment: options.appPathSegment
|
|
164
164
|
}, callbackWS);
|