solid-ui 2.4.14-bbf45639-641e6c97 → 2.4.15-alpha
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/LICENSE.md +0 -0
- package/README.md +0 -0
- package/lib/acl/access-controller.d.ts +0 -0
- package/lib/acl/access-controller.d.ts.map +0 -0
- package/lib/acl/access-controller.js +0 -0
- package/lib/acl/access-controller.js.map +0 -0
- package/lib/acl/access-groups.d.ts +0 -0
- package/lib/acl/access-groups.d.ts.map +0 -0
- package/lib/acl/access-groups.js +0 -0
- package/lib/acl/access-groups.js.map +0 -0
- package/lib/acl/acl-control.d.ts +0 -0
- package/lib/acl/acl-control.d.ts.map +0 -0
- package/lib/acl/acl-control.js +0 -0
- package/lib/acl/acl-control.js.map +0 -0
- package/lib/acl/acl.d.ts +0 -0
- package/lib/acl/acl.d.ts.map +0 -0
- package/lib/acl/acl.js +0 -0
- package/lib/acl/acl.js.map +0 -0
- package/lib/acl/add-agent-buttons.d.ts +0 -0
- package/lib/acl/add-agent-buttons.d.ts.map +0 -0
- package/lib/acl/add-agent-buttons.js +0 -0
- package/lib/acl/add-agent-buttons.js.map +0 -0
- package/lib/acl/index.d.ts +0 -0
- package/lib/acl/index.d.ts.map +0 -0
- package/lib/acl/index.js +0 -0
- package/lib/acl/index.js.map +0 -0
- package/lib/acl/styles.d.ts +0 -0
- package/lib/acl/styles.d.ts.map +0 -0
- package/lib/acl/styles.js +0 -0
- package/lib/acl/styles.js.map +0 -0
- package/lib/acl/types.d.ts +0 -0
- package/lib/acl/types.d.ts.map +0 -0
- package/lib/acl/types.js +0 -0
- package/lib/acl/types.js.map +0 -0
- package/lib/authn/authSession.d.ts +0 -0
- package/lib/authn/authSession.d.ts.map +0 -0
- package/lib/authn/authSession.js +0 -0
- package/lib/authn/authSession.js.map +0 -0
- package/lib/authn/authn.d.ts +0 -0
- package/lib/authn/authn.d.ts.map +0 -0
- package/lib/authn/authn.js +0 -0
- package/lib/authn/authn.js.map +0 -0
- package/lib/authn/config-default.js +0 -0
- package/lib/authn/config-default.js.map +0 -0
- package/lib/authn/index.d.ts +0 -0
- package/lib/authn/index.d.ts.map +0 -0
- package/lib/authn/index.js +0 -0
- package/lib/authn/index.js.map +0 -0
- package/lib/authn/signup.js +0 -0
- package/lib/authn/signup.js.map +0 -0
- package/lib/authn/types.d.ts +0 -0
- package/lib/authn/types.d.ts.map +0 -0
- package/lib/authn/types.js +0 -0
- package/lib/authn/types.js.map +0 -0
- package/lib/chat/bookmarks.js +14 -13
- package/lib/chat/bookmarks.js.map +1 -1
- package/lib/chat/chatLogic.js +340 -0
- package/lib/chat/chatLogic.js.map +1 -0
- package/lib/chat/dateFolder.js +12 -12
- package/lib/chat/dateFolder.js.map +1 -1
- package/lib/chat/infinite.js +285 -665
- package/lib/chat/infinite.js.map +1 -1
- package/lib/chat/message.js +445 -71
- package/lib/chat/message.js.map +1 -1
- package/lib/chat/messageTools.js +165 -103
- package/lib/chat/messageTools.js.map +1 -1
- package/lib/chat/thread.js +162 -32
- package/lib/chat/thread.js.map +1 -1
- package/lib/create/create.d.ts +0 -0
- package/lib/create/create.d.ts.map +0 -0
- package/lib/create/create.js +0 -0
- package/lib/create/create.js.map +0 -0
- package/lib/create/index.d.ts +0 -0
- package/lib/create/index.d.ts.map +0 -0
- package/lib/create/index.js +0 -0
- package/lib/create/index.js.map +0 -0
- package/lib/create/types.d.ts +0 -0
- package/lib/create/types.d.ts.map +0 -0
- package/lib/create/types.js +0 -0
- package/lib/create/types.js.map +0 -0
- package/lib/debug.d.ts +0 -0
- package/lib/debug.d.ts.map +0 -0
- package/lib/debug.js +0 -0
- package/lib/debug.js.map +0 -0
- package/lib/folders.js +0 -0
- package/lib/folders.js.map +0 -0
- package/lib/footer/index.d.ts +0 -0
- package/lib/footer/index.d.ts.map +0 -0
- package/lib/footer/index.js +0 -0
- package/lib/footer/index.js.map +0 -0
- package/lib/footer/styleMap.d.ts +0 -0
- package/lib/footer/styleMap.d.ts.map +0 -0
- package/lib/footer/styleMap.js +0 -0
- package/lib/footer/styleMap.js.map +0 -0
- package/lib/header/empty-profile.d.ts +0 -0
- package/lib/header/empty-profile.d.ts.map +0 -0
- package/lib/header/empty-profile.js +0 -0
- package/lib/header/empty-profile.js.map +0 -0
- package/lib/header/index.d.ts +0 -0
- package/lib/header/index.d.ts.map +0 -0
- package/lib/header/index.js +0 -0
- package/lib/header/index.js.map +0 -0
- package/lib/header/styleMap.d.ts +0 -0
- package/lib/header/styleMap.d.ts.map +0 -0
- package/lib/header/styleMap.js +0 -0
- package/lib/header/styleMap.js.map +0 -0
- package/lib/iconBase.d.ts +0 -0
- package/lib/iconBase.d.ts.map +0 -0
- package/lib/iconBase.js +0 -0
- package/lib/iconBase.js.map +0 -0
- package/lib/icons/solid_logo.d.ts +0 -0
- package/lib/icons/solid_logo.d.ts.map +0 -0
- package/lib/icons/solid_logo.js +0 -0
- package/lib/icons/solid_logo.js.map +0 -0
- package/lib/index.d.ts +0 -0
- package/lib/index.d.ts.map +0 -0
- package/lib/index.js +0 -0
- package/lib/index.js.map +0 -0
- package/lib/jss/index.d.ts +0 -0
- package/lib/jss/index.d.ts.map +0 -0
- package/lib/jss/index.js +0 -0
- package/lib/jss/index.js.map +0 -0
- package/lib/log.d.ts +0 -0
- package/lib/log.d.ts.map +0 -0
- package/lib/log.js +0 -0
- package/lib/log.js.map +0 -0
- package/lib/logic.d.ts +0 -0
- package/lib/logic.d.ts.map +0 -0
- package/lib/logic.js +0 -0
- package/lib/logic.js.map +0 -0
- package/lib/matrix/index.d.ts +0 -0
- package/lib/matrix/index.d.ts.map +0 -0
- package/lib/matrix/index.js +0 -0
- package/lib/matrix/index.js.map +0 -0
- package/lib/matrix/matrix.d.ts +0 -0
- package/lib/matrix/matrix.d.ts.map +0 -0
- package/lib/matrix/matrix.js +0 -0
- package/lib/matrix/matrix.js.map +0 -0
- package/lib/matrix/types.d.ts +0 -0
- package/lib/matrix/types.d.ts.map +0 -0
- package/lib/matrix/types.js +0 -0
- package/lib/matrix/types.js.map +0 -0
- package/lib/media/index.d.ts +0 -0
- package/lib/media/index.d.ts.map +0 -0
- package/lib/media/index.js +0 -0
- package/lib/media/index.js.map +0 -0
- package/lib/media/media-capture.d.ts +0 -0
- package/lib/media/media-capture.d.ts.map +0 -0
- package/lib/media/media-capture.js +0 -0
- package/lib/media/media-capture.js.map +0 -0
- package/lib/messageArea.js +0 -0
- package/lib/messageArea.js.map +0 -0
- package/lib/noun_Camera_1618446_000000.js +0 -0
- package/lib/noun_Camera_1618446_000000.js.map +0 -0
- package/lib/ns.js +0 -0
- package/lib/ns.js.map +0 -0
- package/lib/pad.d.ts +0 -0
- package/lib/pad.d.ts.map +0 -0
- package/lib/pad.js +0 -0
- package/lib/pad.js.map +0 -0
- package/lib/participation.d.ts +0 -0
- package/lib/participation.d.ts.map +0 -0
- package/lib/participation.js +0 -0
- package/lib/participation.js.map +0 -0
- package/lib/preferences.js +0 -0
- package/lib/preferences.js.map +0 -0
- package/lib/stories/decorators.js +0 -0
- package/lib/stories/decorators.js.map +0 -0
- package/lib/style.js +0 -0
- package/lib/style.js.map +0 -0
- package/lib/table.js +0 -0
- package/lib/table.js.map +0 -0
- package/lib/tabs.d.ts +0 -0
- package/lib/tabs.d.ts.map +0 -0
- package/lib/tabs.js +0 -0
- package/lib/tabs.js.map +0 -0
- package/lib/typings.d.js +0 -0
- package/lib/typings.d.js.map +0 -0
- package/lib/utils/headerFooterHelpers.d.ts +0 -0
- package/lib/utils/headerFooterHelpers.d.ts.map +0 -0
- package/lib/utils/headerFooterHelpers.js +0 -0
- package/lib/utils/headerFooterHelpers.js.map +0 -0
- package/lib/utils/index.js +0 -0
- package/lib/utils/index.js.map +0 -0
- package/lib/utils/label.d.ts +0 -0
- package/lib/utils/label.d.ts.map +0 -0
- package/lib/utils/label.js +0 -0
- package/lib/utils/label.js.map +0 -0
- package/lib/versionInfo.d.ts +0 -0
- package/lib/versionInfo.d.ts.map +0 -0
- package/lib/versionInfo.js +10 -10
- package/lib/versionInfo.js.map +1 -1
- package/lib/webpack-bundle.js +1408 -993
- package/lib/webpack-bundle.js.map +1 -1
- package/lib/widgets/buttons/iconLinks.d.ts +0 -0
- package/lib/widgets/buttons/iconLinks.d.ts.map +0 -0
- package/lib/widgets/buttons/iconLinks.js +0 -0
- package/lib/widgets/buttons/iconLinks.js.map +0 -0
- package/lib/widgets/buttons.d.ts +0 -0
- package/lib/widgets/buttons.d.ts.map +1 -1
- package/lib/widgets/buttons.js +8 -1
- package/lib/widgets/buttons.js.map +1 -1
- package/lib/widgets/dragAndDrop.js +0 -0
- package/lib/widgets/dragAndDrop.js.map +0 -0
- package/lib/widgets/error.d.ts +0 -0
- package/lib/widgets/error.d.ts.map +0 -0
- package/lib/widgets/error.js +0 -0
- package/lib/widgets/error.js.map +0 -0
- package/lib/widgets/forms/autocomplete/autocompleteBar.d.ts +0 -0
- package/lib/widgets/forms/autocomplete/autocompleteBar.d.ts.map +0 -0
- package/lib/widgets/forms/autocomplete/autocompleteBar.js +0 -0
- package/lib/widgets/forms/autocomplete/autocompleteBar.js.map +0 -0
- package/lib/widgets/forms/autocomplete/autocompleteField.d.ts +0 -0
- package/lib/widgets/forms/autocomplete/autocompleteField.d.ts.map +0 -0
- package/lib/widgets/forms/autocomplete/autocompleteField.js +0 -0
- package/lib/widgets/forms/autocomplete/autocompleteField.js.map +0 -0
- package/lib/widgets/forms/autocomplete/autocompletePicker.d.ts +0 -0
- package/lib/widgets/forms/autocomplete/autocompletePicker.d.ts.map +0 -0
- package/lib/widgets/forms/autocomplete/autocompletePicker.js +0 -0
- package/lib/widgets/forms/autocomplete/autocompletePicker.js.map +0 -0
- package/lib/widgets/forms/autocomplete/language.d.ts +0 -0
- package/lib/widgets/forms/autocomplete/language.d.ts.map +0 -0
- package/lib/widgets/forms/autocomplete/language.js +0 -0
- package/lib/widgets/forms/autocomplete/language.js.map +0 -0
- package/lib/widgets/forms/autocomplete/publicData.d.ts +0 -0
- package/lib/widgets/forms/autocomplete/publicData.d.ts.map +0 -0
- package/lib/widgets/forms/autocomplete/publicData.js +0 -0
- package/lib/widgets/forms/autocomplete/publicData.js.map +0 -0
- package/lib/widgets/forms/basic.d.ts +0 -0
- package/lib/widgets/forms/basic.d.ts.map +0 -0
- package/lib/widgets/forms/basic.js +0 -0
- package/lib/widgets/forms/basic.js.map +0 -0
- package/lib/widgets/forms/comment.d.ts +0 -0
- package/lib/widgets/forms/comment.d.ts.map +0 -0
- package/lib/widgets/forms/comment.js +0 -0
- package/lib/widgets/forms/comment.js.map +0 -0
- package/lib/widgets/forms/fieldFunction.d.ts +0 -0
- package/lib/widgets/forms/fieldFunction.d.ts.map +0 -0
- package/lib/widgets/forms/fieldFunction.js +0 -0
- package/lib/widgets/forms/fieldFunction.js.map +0 -0
- package/lib/widgets/forms/fieldParams.d.ts +0 -0
- package/lib/widgets/forms/fieldParams.d.ts.map +0 -0
- package/lib/widgets/forms/fieldParams.js +0 -0
- package/lib/widgets/forms/fieldParams.js.map +0 -0
- package/lib/widgets/forms/formStyle.d.ts +0 -0
- package/lib/widgets/forms/formStyle.d.ts.map +0 -0
- package/lib/widgets/forms/formStyle.js +0 -0
- package/lib/widgets/forms/formStyle.js.map +0 -0
- package/lib/widgets/forms.js +0 -0
- package/lib/widgets/forms.js.map +0 -0
- package/lib/widgets/index.js +0 -0
- package/lib/widgets/index.js.map +0 -0
- package/lib/widgets/peoplePicker.js +0 -0
- package/lib/widgets/peoplePicker.js.map +0 -0
- package/lib/widgets/widgetHelpers.d.ts +0 -0
- package/lib/widgets/widgetHelpers.d.ts.map +0 -0
- package/lib/widgets/widgetHelpers.js +0 -0
- package/lib/widgets/widgetHelpers.js.map +0 -0
- package/package.json +3 -3
package/LICENSE.md
CHANGED
|
File without changes
|
package/README.md
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/lib/acl/access-groups.js
CHANGED
|
File without changes
|
|
File without changes
|
package/lib/acl/acl-control.d.ts
CHANGED
|
File without changes
|
|
File without changes
|
package/lib/acl/acl-control.js
CHANGED
|
File without changes
|
|
File without changes
|
package/lib/acl/acl.d.ts
CHANGED
|
File without changes
|
package/lib/acl/acl.d.ts.map
CHANGED
|
File without changes
|
package/lib/acl/acl.js
CHANGED
|
File without changes
|
package/lib/acl/acl.js.map
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/lib/acl/index.d.ts
CHANGED
|
File without changes
|
package/lib/acl/index.d.ts.map
CHANGED
|
File without changes
|
package/lib/acl/index.js
CHANGED
|
File without changes
|
package/lib/acl/index.js.map
CHANGED
|
File without changes
|
package/lib/acl/styles.d.ts
CHANGED
|
File without changes
|
package/lib/acl/styles.d.ts.map
CHANGED
|
File without changes
|
package/lib/acl/styles.js
CHANGED
|
File without changes
|
package/lib/acl/styles.js.map
CHANGED
|
File without changes
|
package/lib/acl/types.d.ts
CHANGED
|
File without changes
|
package/lib/acl/types.d.ts.map
CHANGED
|
File without changes
|
package/lib/acl/types.js
CHANGED
|
File without changes
|
package/lib/acl/types.js.map
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/lib/authn/authSession.js
CHANGED
|
File without changes
|
|
File without changes
|
package/lib/authn/authn.d.ts
CHANGED
|
File without changes
|
package/lib/authn/authn.d.ts.map
CHANGED
|
File without changes
|
package/lib/authn/authn.js
CHANGED
|
File without changes
|
package/lib/authn/authn.js.map
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/lib/authn/index.d.ts
CHANGED
|
File without changes
|
package/lib/authn/index.d.ts.map
CHANGED
|
File without changes
|
package/lib/authn/index.js
CHANGED
|
File without changes
|
package/lib/authn/index.js.map
CHANGED
|
File without changes
|
package/lib/authn/signup.js
CHANGED
|
File without changes
|
package/lib/authn/signup.js.map
CHANGED
|
File without changes
|
package/lib/authn/types.d.ts
CHANGED
|
File without changes
|
package/lib/authn/types.d.ts.map
CHANGED
|
File without changes
|
package/lib/authn/types.js
CHANGED
|
File without changes
|
package/lib/authn/types.js.map
CHANGED
|
File without changes
|
package/lib/chat/bookmarks.js
CHANGED
|
@@ -63,7 +63,6 @@ var UI = {
|
|
|
63
63
|
var $rdf = UI.rdf;
|
|
64
64
|
var BOOK = $rdf.Namespace('http://www.w3.org/2002/01/bookmark#');
|
|
65
65
|
var BOOKMARK_ICON = 'noun_45961.svg';
|
|
66
|
-
var kb = _logic.store;
|
|
67
66
|
var label = utils.label;
|
|
68
67
|
var dom = window.document || null;
|
|
69
68
|
/** Create a resource if it really does not exist
|
|
@@ -74,19 +73,20 @@ var dom = window.document || null;
|
|
|
74
73
|
|
|
75
74
|
function createIfNotExists(doc) {
|
|
76
75
|
return new Promise(function (resolve, reject) {
|
|
77
|
-
|
|
78
|
-
debug.log('createIfNotExists doc exists, all good ' + doc); //
|
|
76
|
+
_logic.store.fetcher.load(doc).then(function (response) {
|
|
77
|
+
debug.log('createIfNotExists doc exists, all good ' + doc); // store.fetcher.webOperation('HEAD', doc.uri).then(response => {
|
|
79
78
|
|
|
80
79
|
resolve(response);
|
|
81
80
|
}, function (err) {
|
|
82
81
|
if (err.response.status === 404) {
|
|
83
82
|
debug.log('createIfNotExists doc does NOT exist, will create... ' + doc);
|
|
84
|
-
|
|
83
|
+
|
|
84
|
+
_logic.store.fetcher.webOperation('PUT', doc.uri, {
|
|
85
85
|
data: '',
|
|
86
86
|
contentType: 'text/turtle'
|
|
87
87
|
}).then(function (response) {
|
|
88
88
|
// fetcher.requested[doc.uri] = 'done' // do not need to read ?? but no headers
|
|
89
|
-
delete
|
|
89
|
+
delete _logic.store.fetcher.requested[doc.uri]; // delete cached 404 error
|
|
90
90
|
|
|
91
91
|
debug.log('createIfNotExists doc created ok ' + doc);
|
|
92
92
|
resolve(response);
|
|
@@ -105,13 +105,14 @@ function createIfNotExists(doc) {
|
|
|
105
105
|
|
|
106
106
|
function updatePromise(del, ins) {
|
|
107
107
|
return new Promise(function (resolve, reject) {
|
|
108
|
-
|
|
108
|
+
_logic.store.updater.update(del, ins, function (uri, ok, errorBody) {
|
|
109
109
|
if (!ok) {
|
|
110
110
|
reject(new Error(errorBody));
|
|
111
111
|
} else {
|
|
112
112
|
resolve();
|
|
113
113
|
}
|
|
114
114
|
}); // callback
|
|
115
|
+
|
|
115
116
|
}); // promise
|
|
116
117
|
} // export findBookmarkDocument,
|
|
117
118
|
|
|
@@ -240,8 +241,8 @@ function _addBookmark() {
|
|
|
240
241
|
throw new Error('Must be logged on to add Bookmark');
|
|
241
242
|
|
|
242
243
|
case 4:
|
|
243
|
-
author =
|
|
244
|
-
title = label(author) + ': ' +
|
|
244
|
+
author = _logic.store.any(target, ns.foaf('maker'));
|
|
245
|
+
title = label(author) + ': ' + _logic.store.anyValue(target, ns.sioc('content')).slice(0, 80); // @@ add chat title too?
|
|
245
246
|
|
|
246
247
|
bookmarkDoc = context.bookmarkDocument;
|
|
247
248
|
bookmark = UI.widgets.newThing(bookmarkDoc, title);
|
|
@@ -286,10 +287,10 @@ function _toggleBookmark() {
|
|
|
286
287
|
switch (_context3.prev = _context3.next) {
|
|
287
288
|
case 0:
|
|
288
289
|
_context3.next = 2;
|
|
289
|
-
return
|
|
290
|
+
return _logic.store.fetcher.load(userContext.bookmarkDocument);
|
|
290
291
|
|
|
291
292
|
case 2:
|
|
292
|
-
bookmarks =
|
|
293
|
+
bookmarks = _logic.store.each(null, BOOK('recalls'), target, userContext.bookmarkDocument);
|
|
293
294
|
|
|
294
295
|
if (!bookmarks.length) {
|
|
295
296
|
_context3.next = 24;
|
|
@@ -314,7 +315,7 @@ function _toggleBookmark() {
|
|
|
314
315
|
|
|
315
316
|
_context3.prev = 8;
|
|
316
317
|
_context3.next = 11;
|
|
317
|
-
return updatePromise(
|
|
318
|
+
return updatePromise(_logic.store.connectedStatements(bookmarks[i]), []);
|
|
318
319
|
|
|
319
320
|
case 11:
|
|
320
321
|
bookmarkButton.style.backgroundColor = 'white';
|
|
@@ -376,10 +377,10 @@ function _renderBookmarksButton() {
|
|
|
376
377
|
switch (_context4.prev = _context4.next) {
|
|
377
378
|
case 0:
|
|
378
379
|
_context4.next = 2;
|
|
379
|
-
return
|
|
380
|
+
return _logic.store.fetcher.load(userContext.bookmarkDocument);
|
|
380
381
|
|
|
381
382
|
case 2:
|
|
382
|
-
bookmarked =
|
|
383
|
+
bookmarked = _logic.store.any(null, BOOK('recalls'), bookmarkButton.target, userContext.bookmarkDocument);
|
|
383
384
|
bookmarkButton.style = UI.style.buttonStyle;
|
|
384
385
|
if (bookmarked) bookmarkButton.style.backgroundColor = 'yellow';
|
|
385
386
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/chat/bookmarks.js"],"names":["UI","authn","icons","ns","media","pad","rdf","store","style","utils","widgets","$rdf","BOOK","Namespace","BOOKMARK_ICON","kb","label","dom","window","document","createIfNotExists","doc","Promise","resolve","reject","fetcher","load","then","response","debug","log","err","status","webOperation","uri","data","contentType","requested","updatePromise","del","ins","updater","update","ok","errorBody","Error","findBookmarkDocument","userContext","theClass","fileTail","isPublic","findAppInstances","instances","length","bookmarkDocument","alert","publicProfile","newBookmarkFile","sym","dir","error","registerInTypeIndex","addBookmark","context","target","title","me","currentUser","author","any","foaf","anyValue","sioc","slice","bookmarkDoc","bookmark","newThing","st","dct","Date","msg","toggleBookmark","bookmarkButton","bookmarks","each","confirm","i","connectedStatements","backgroundColor","renderBookmarksButton","setBookmarkButtonColor","bookmarked","buttonStyle","button","iconBase"],"mappings":"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","sourcesContent":["/**\n * Functions related to chat and bookmarks\n * @packageDocumentation\n */\n\n/* global alert confirm */\nimport { authn } from '../authn/index'\nimport * as debug from '../debug'\nimport { icons } from '../iconBase'\nimport { store } from '../logic'\nimport { media } from '../media/index'\nimport * as ns from '../ns'\nimport * as pad from '../pad'\nimport * as rdf from 'rdflib' // pull in first avoid cross-refs\nimport * as style from '../style'\nimport * as utils from '../utils'\nimport * as widgets from '../widgets'\n\nconst UI = { authn, icons, ns, media, pad, rdf, store, style, utils, widgets }\nconst $rdf = UI.rdf\n\nconst BOOK = $rdf.Namespace('http://www.w3.org/2002/01/bookmark#')\nconst BOOKMARK_ICON = 'noun_45961.svg'\n\nconst kb = store\nconst label = utils.label\nconst dom = window.document || null\n\n/** Create a resource if it really does not exist\n * Be absolutely sure something does not exist before creating a new empty file\n * as otherwise existing could be deleted.\n * @param doc {NamedNode} - The resource\n */\nfunction createIfNotExists (doc) {\n return new Promise(function (resolve, reject) {\n kb.fetcher.load(doc).then(\n response => {\n debug.log('createIfNotExists doc exists, all good ' + doc)\n // kb.fetcher.webOperation('HEAD', doc.uri).then(response => {\n resolve(response)\n },\n err => {\n if (err.response.status === 404) {\n debug.log(\n 'createIfNotExists doc does NOT exist, will create... ' + doc\n )\n\n kb.fetcher\n .webOperation('PUT', doc.uri, {\n data: '',\n contentType: 'text/turtle'\n })\n .then(\n response => {\n // fetcher.requested[doc.uri] = 'done' // do not need to read ?? but no headers\n delete kb.fetcher.requested[doc.uri] // delete cached 404 error\n debug.log('createIfNotExists doc created ok ' + doc)\n resolve(response)\n },\n err => {\n debug.log('createIfNotExists doc FAILED: ' + doc + ': ' + err)\n reject(err)\n }\n )\n } else {\n debug.log(\n 'createIfNotExists doc load error NOT 404: ' + doc + ': ' + err\n )\n reject(err)\n }\n }\n )\n })\n}\n\n// @@@@ use the one in rdflib.js when it is avaiable and delete this\nfunction updatePromise (del, ins) {\n return new Promise(function (resolve, reject) {\n kb.updater.update(del, ins, function (uri, ok, errorBody) {\n if (!ok) {\n reject(new Error(errorBody))\n } else {\n resolve()\n }\n }) // callback\n }) // promise\n}\n\n// export findBookmarkDocument,\n\n/* Bookmarking\n */\n/** Find a user's bookmarks\n */\nexport async function findBookmarkDocument (userContext) {\n const theClass = BOOK('Bookmark')\n const fileTail = 'bookmarks.ttl'\n const isPublic = true\n\n await UI.authn.findAppInstances(userContext, theClass, isPublic) // public -- only look for public links\n if (userContext.instances && userContext.instances.length > 0) {\n userContext.bookmarkDocument = userContext.instances[0]\n if (userContext.instances.length > 1) {\n alert('More than one bookmark file! ' + userContext.instances)\n }\n } else {\n if (userContext.publicProfile) {\n // publicProfile or preferencesFile\n const newBookmarkFile = $rdf.sym(\n userContext.publicProfile.dir().uri + fileTail\n )\n try {\n debug.log('Creating new bookmark file ' + newBookmarkFile)\n await createIfNotExists(newBookmarkFile)\n } catch (e) {\n alert.error(\"Can't make fresh bookmark file:\" + e)\n return userContext\n }\n await UI.authn.registerInTypeIndex(\n userContext,\n newBookmarkFile,\n theClass,\n true\n ) // public\n userContext.bookmarkDocument = newBookmarkFile\n } else {\n alert('You seem to have no bookmark file and not even a profile file.')\n }\n }\n return userContext\n}\n\n/** Add a bookmark\n */\n\nasync function addBookmark (context, target) {\n /* like\n @prefix terms: <http://purl.org/dc/terms/>.\n @prefix bookm: <http://www.w3.org/2002/01/bookmark#>.\n @prefix n0: <http://xmlns.com/foaf/0.1/>.\n <> terms:references <#0.5534145389246576>.\n <#0.5534145389246576>\n a bookm:Bookmark;\n terms:created \"2019-01-26T20:26:44.374Z\"^^XML:dateTime;\n terms:title \"Herons\";\n bookm:recalls wiki:Heron;\n n0:maker c:me.\n */\n let title = ''\n const me = UI.authn.currentUser() // If already logged on\n if (!me) throw new Error('Must be logged on to add Bookmark')\n\n const author = kb.any(target, ns.foaf('maker'))\n title =\n label(author) + ': ' + kb.anyValue(target, ns.sioc('content')).slice(0, 80) // @@ add chat title too?\n const bookmarkDoc = context.bookmarkDocument\n const bookmark = UI.widgets.newThing(bookmarkDoc, title)\n const ins = [\n $rdf.st(bookmarkDoc, UI.ns.dct('references'), bookmark, bookmarkDoc),\n $rdf.st(bookmark, UI.ns.rdf('type'), BOOK('Bookmark'), bookmarkDoc),\n $rdf.st(bookmark, UI.ns.dct('created'), new Date(), bookmarkDoc),\n $rdf.st(bookmark, BOOK('recalls'), target, bookmarkDoc),\n $rdf.st(bookmark, UI.ns.foaf('maker'), me, bookmarkDoc),\n $rdf.st(bookmark, UI.ns.dct('title'), title, bookmarkDoc)\n ]\n try {\n await updatePromise([], ins) // 20190118A\n } catch (e) {\n const msg = 'Making bookmark: ' + e\n alert.error(msg)\n return null\n }\n return bookmark\n}\n\nexport async function toggleBookmark (userContext, target, bookmarkButton) {\n await kb.fetcher.load(userContext.bookmarkDocument)\n const bookmarks = kb.each(\n null,\n BOOK('recalls'),\n target,\n userContext.bookmarkDocument\n )\n if (bookmarks.length) {\n // delete\n if (!confirm('Delete bookmark on this?' + bookmarks.length)) return\n for (let i = 0; i < bookmarks.length; i++) {\n try {\n await updatePromise(kb.connectedStatements(bookmarks[i]), [])\n bookmarkButton.style.backgroundColor = 'white'\n debug.log('Bookmark deleted: ' + bookmarks[i])\n } catch (e) {\n debug.error('Cant delete bookmark:' + e)\n alert('Cant delete bookmark:' + e)\n }\n }\n } else {\n const bookmark = await addBookmark(userContext, target)\n bookmarkButton.style.backgroundColor = 'yellow'\n debug.log('Bookmark added: ' + bookmark)\n }\n}\n\nexport async function renderBookmarksButton (userContext, target) {\n async function setBookmarkButtonColor (bookmarkButton) {\n await kb.fetcher.load(userContext.bookmarkDocument)\n const bookmarked = kb.any(\n null,\n BOOK('recalls'),\n bookmarkButton.target,\n userContext.bookmarkDocument\n )\n bookmarkButton.style = UI.style.buttonStyle\n if (bookmarked) bookmarkButton.style.backgroundColor = 'yellow'\n }\n\n let bookmarkButton\n if (userContext.bookmarkDocument) {\n bookmarkButton = UI.widgets.button(\n dom,\n UI.icons.iconBase + BOOKMARK_ICON,\n label(BOOK('Bookmark')),\n () => {\n toggleBookmark(userContext, target, bookmarkButton)\n }\n )\n bookmarkButton.target = target\n await setBookmarkButtonColor(bookmarkButton)\n return bookmarkButton\n }\n}\n"],"file":"bookmarks.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/chat/bookmarks.js"],"names":["UI","authn","icons","ns","media","pad","rdf","store","style","utils","widgets","$rdf","BOOK","Namespace","BOOKMARK_ICON","label","dom","window","document","createIfNotExists","doc","Promise","resolve","reject","fetcher","load","then","response","debug","log","err","status","webOperation","uri","data","contentType","requested","updatePromise","del","ins","updater","update","ok","errorBody","Error","findBookmarkDocument","userContext","theClass","fileTail","isPublic","findAppInstances","instances","length","bookmarkDocument","alert","publicProfile","newBookmarkFile","sym","dir","error","registerInTypeIndex","addBookmark","context","target","title","me","currentUser","author","any","foaf","anyValue","sioc","slice","bookmarkDoc","bookmark","newThing","st","dct","Date","msg","toggleBookmark","bookmarkButton","bookmarks","each","confirm","i","connectedStatements","backgroundColor","renderBookmarksButton","setBookmarkButtonColor","bookmarked","buttonStyle","button","iconBase"],"mappings":"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","sourcesContent":["/**\n * Functions related to chat and bookmarks\n * @packageDocumentation\n */\n\n/* global alert confirm */\nimport { authn } from '../authn/index'\nimport * as debug from '../debug'\nimport { icons } from '../iconBase'\nimport { store } from '../logic'\nimport { media } from '../media/index'\nimport * as ns from '../ns'\nimport * as pad from '../pad'\nimport * as rdf from 'rdflib' // pull in first avoid cross-refs\nimport * as style from '../style'\nimport * as utils from '../utils'\nimport * as widgets from '../widgets'\n\nconst UI = { authn, icons, ns, media, pad, rdf, store, style, utils, widgets }\nconst $rdf = UI.rdf\n\nconst BOOK = $rdf.Namespace('http://www.w3.org/2002/01/bookmark#')\nconst BOOKMARK_ICON = 'noun_45961.svg'\n\nconst label = utils.label\nconst dom = window.document || null\n\n/** Create a resource if it really does not exist\n * Be absolutely sure something does not exist before creating a new empty file\n * as otherwise existing could be deleted.\n * @param doc {NamedNode} - The resource\n */\nfunction createIfNotExists (doc) {\n return new Promise(function (resolve, reject) {\n store.fetcher.load(doc).then(\n response => {\n debug.log('createIfNotExists doc exists, all good ' + doc)\n // store.fetcher.webOperation('HEAD', doc.uri).then(response => {\n resolve(response)\n },\n err => {\n if (err.response.status === 404) {\n debug.log(\n 'createIfNotExists doc does NOT exist, will create... ' + doc\n )\n\n store.fetcher\n .webOperation('PUT', doc.uri, {\n data: '',\n contentType: 'text/turtle'\n })\n .then(\n response => {\n // fetcher.requested[doc.uri] = 'done' // do not need to read ?? but no headers\n delete store.fetcher.requested[doc.uri] // delete cached 404 error\n debug.log('createIfNotExists doc created ok ' + doc)\n resolve(response)\n },\n err => {\n debug.log('createIfNotExists doc FAILED: ' + doc + ': ' + err)\n reject(err)\n }\n )\n } else {\n debug.log(\n 'createIfNotExists doc load error NOT 404: ' + doc + ': ' + err\n )\n reject(err)\n }\n }\n )\n })\n}\n\n// @@@@ use the one in rdflib.js when it is avaiable and delete this\nfunction updatePromise (del, ins) {\n return new Promise(function (resolve, reject) {\n store.updater.update(del, ins, function (uri, ok, errorBody) {\n if (!ok) {\n reject(new Error(errorBody))\n } else {\n resolve()\n }\n }) // callback\n }) // promise\n}\n\n// export findBookmarkDocument,\n\n/* Bookmarking\n */\n/** Find a user's bookmarks\n */\nexport async function findBookmarkDocument (userContext) {\n const theClass = BOOK('Bookmark')\n const fileTail = 'bookmarks.ttl'\n const isPublic = true\n\n await UI.authn.findAppInstances(userContext, theClass, isPublic) // public -- only look for public links\n if (userContext.instances && userContext.instances.length > 0) {\n userContext.bookmarkDocument = userContext.instances[0]\n if (userContext.instances.length > 1) {\n alert('More than one bookmark file! ' + userContext.instances)\n }\n } else {\n if (userContext.publicProfile) {\n // publicProfile or preferencesFile\n const newBookmarkFile = $rdf.sym(\n userContext.publicProfile.dir().uri + fileTail\n )\n try {\n debug.log('Creating new bookmark file ' + newBookmarkFile)\n await createIfNotExists(newBookmarkFile)\n } catch (e) {\n alert.error(\"Can't make fresh bookmark file:\" + e)\n return userContext\n }\n await UI.authn.registerInTypeIndex(\n userContext,\n newBookmarkFile,\n theClass,\n true\n ) // public\n userContext.bookmarkDocument = newBookmarkFile\n } else {\n alert('You seem to have no bookmark file and not even a profile file.')\n }\n }\n return userContext\n}\n\n/** Add a bookmark\n */\n\nasync function addBookmark (context, target) {\n /* like\n @prefix terms: <http://purl.org/dc/terms/>.\n @prefix bookm: <http://www.w3.org/2002/01/bookmark#>.\n @prefix n0: <http://xmlns.com/foaf/0.1/>.\n <> terms:references <#0.5534145389246576>.\n <#0.5534145389246576>\n a bookm:Bookmark;\n terms:created \"2019-01-26T20:26:44.374Z\"^^XML:dateTime;\n terms:title \"Herons\";\n bookm:recalls wiki:Heron;\n n0:maker c:me.\n */\n let title = ''\n const me = UI.authn.currentUser() // If already logged on\n if (!me) throw new Error('Must be logged on to add Bookmark')\n\n const author = store.any(target, ns.foaf('maker'))\n title =\n label(author) + ': ' + store.anyValue(target, ns.sioc('content')).slice(0, 80) // @@ add chat title too?\n const bookmarkDoc = context.bookmarkDocument\n const bookmark = UI.widgets.newThing(bookmarkDoc, title)\n const ins = [\n $rdf.st(bookmarkDoc, UI.ns.dct('references'), bookmark, bookmarkDoc),\n $rdf.st(bookmark, UI.ns.rdf('type'), BOOK('Bookmark'), bookmarkDoc),\n $rdf.st(bookmark, UI.ns.dct('created'), new Date(), bookmarkDoc),\n $rdf.st(bookmark, BOOK('recalls'), target, bookmarkDoc),\n $rdf.st(bookmark, UI.ns.foaf('maker'), me, bookmarkDoc),\n $rdf.st(bookmark, UI.ns.dct('title'), title, bookmarkDoc)\n ]\n try {\n await updatePromise([], ins) // 20190118A\n } catch (e) {\n const msg = 'Making bookmark: ' + e\n alert.error(msg)\n return null\n }\n return bookmark\n}\n\nexport async function toggleBookmark (userContext, target, bookmarkButton) {\n await store.fetcher.load(userContext.bookmarkDocument)\n const bookmarks = store.each(\n null,\n BOOK('recalls'),\n target,\n userContext.bookmarkDocument\n )\n if (bookmarks.length) {\n // delete\n if (!confirm('Delete bookmark on this?' + bookmarks.length)) return\n for (let i = 0; i < bookmarks.length; i++) {\n try {\n await updatePromise(store.connectedStatements(bookmarks[i]), [])\n bookmarkButton.style.backgroundColor = 'white'\n debug.log('Bookmark deleted: ' + bookmarks[i])\n } catch (e) {\n debug.error('Cant delete bookmark:' + e)\n alert('Cant delete bookmark:' + e)\n }\n }\n } else {\n const bookmark = await addBookmark(userContext, target)\n bookmarkButton.style.backgroundColor = 'yellow'\n debug.log('Bookmark added: ' + bookmark)\n }\n}\n\nexport async function renderBookmarksButton (userContext, target) {\n async function setBookmarkButtonColor (bookmarkButton) {\n await store.fetcher.load(userContext.bookmarkDocument)\n const bookmarked = store.any(\n null,\n BOOK('recalls'),\n bookmarkButton.target,\n userContext.bookmarkDocument\n )\n bookmarkButton.style = UI.style.buttonStyle\n if (bookmarked) bookmarkButton.style.backgroundColor = 'yellow'\n }\n\n let bookmarkButton\n if (userContext.bookmarkDocument) {\n bookmarkButton = UI.widgets.button(\n dom,\n UI.icons.iconBase + BOOKMARK_ICON,\n label(BOOK('Bookmark')),\n () => {\n toggleBookmark(userContext, target, bookmarkButton)\n }\n )\n bookmarkButton.target = target\n await setBookmarkButtonColor(bookmarkButton)\n return bookmarkButton\n }\n}\n"],"file":"bookmarks.js"}
|
|
@@ -0,0 +1,340 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
6
|
+
|
|
7
|
+
Object.defineProperty(exports, "__esModule", {
|
|
8
|
+
value: true
|
|
9
|
+
});
|
|
10
|
+
exports.ChatChannel = void 0;
|
|
11
|
+
exports._createIfNotExists = _createIfNotExists;
|
|
12
|
+
exports.isDeleted = isDeleted;
|
|
13
|
+
exports.isHidden = isHidden;
|
|
14
|
+
exports.isReplaced = isReplaced;
|
|
15
|
+
exports.mostRecentVersion = mostRecentVersion;
|
|
16
|
+
exports.nick = nick;
|
|
17
|
+
exports.originalVersion = originalVersion;
|
|
18
|
+
|
|
19
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
20
|
+
|
|
21
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
22
|
+
|
|
23
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
24
|
+
|
|
25
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
26
|
+
|
|
27
|
+
var debug = _interopRequireWildcard(require("../debug"));
|
|
28
|
+
|
|
29
|
+
var _index = require("../authn/index");
|
|
30
|
+
|
|
31
|
+
var _dateFolder = require("./dateFolder");
|
|
32
|
+
|
|
33
|
+
var _logic = require("../logic");
|
|
34
|
+
|
|
35
|
+
var ns = _interopRequireWildcard(require("../ns"));
|
|
36
|
+
|
|
37
|
+
var $rdf = _interopRequireWildcard(require("rdflib"));
|
|
38
|
+
|
|
39
|
+
var utils = _interopRequireWildcard(require("../utils"));
|
|
40
|
+
|
|
41
|
+
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); }
|
|
42
|
+
|
|
43
|
+
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; }
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Contains the [[ChatChannel]] class and logic for Solid Chat
|
|
47
|
+
* @packageDocumentation
|
|
48
|
+
*/
|
|
49
|
+
// pull in first avoid cross-refs
|
|
50
|
+
|
|
51
|
+
/* The Solid logic for a 'LongChat'
|
|
52
|
+
*/
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Common code for a chat (discussion area of messages about something)
|
|
56
|
+
* This version runs over a series of files for different time periods
|
|
57
|
+
*
|
|
58
|
+
* Parameters for the whole chat like its title are stored on
|
|
59
|
+
* index.ttl#this and the chats messages are stored in YYYY/MM/DD/chat.ttl
|
|
60
|
+
*
|
|
61
|
+
*/
|
|
62
|
+
var ChatChannel = /*#__PURE__*/function () {
|
|
63
|
+
function ChatChannel(channel, options) {
|
|
64
|
+
(0, _classCallCheck2["default"])(this, ChatChannel);
|
|
65
|
+
this.channel = channel;
|
|
66
|
+
this.channelRoot = channel.doc();
|
|
67
|
+
this.options = options;
|
|
68
|
+
this.dateFolder = new _dateFolder.DateFolder(this.channelRoot, 'chat.ttl');
|
|
69
|
+
this.div = null; // : HTMLElement
|
|
70
|
+
}
|
|
71
|
+
/* Store a new message in the web,
|
|
72
|
+
*/
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
(0, _createClass2["default"])(ChatChannel, [{
|
|
76
|
+
key: "createMessage",
|
|
77
|
+
value: function () {
|
|
78
|
+
var _createMessage = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(text) {
|
|
79
|
+
return _regenerator["default"].wrap(function _callee$(_context) {
|
|
80
|
+
while (1) {
|
|
81
|
+
switch (_context.prev = _context.next) {
|
|
82
|
+
case 0:
|
|
83
|
+
return _context.abrupt("return", this.updateMessage(text));
|
|
84
|
+
|
|
85
|
+
case 1:
|
|
86
|
+
case "end":
|
|
87
|
+
return _context.stop();
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}, _callee, this);
|
|
91
|
+
}));
|
|
92
|
+
|
|
93
|
+
function createMessage(_x) {
|
|
94
|
+
return _createMessage.apply(this, arguments);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
return createMessage;
|
|
98
|
+
}()
|
|
99
|
+
/* Store a new message in the web,
|
|
100
|
+
as a replacement for an existing one.
|
|
101
|
+
The old one iis left, and the two are linked
|
|
102
|
+
*/
|
|
103
|
+
|
|
104
|
+
}, {
|
|
105
|
+
key: "updateMessage",
|
|
106
|
+
value: function () {
|
|
107
|
+
var _updateMessage = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2(text) {
|
|
108
|
+
var oldMsg,
|
|
109
|
+
deleteIt,
|
|
110
|
+
sts,
|
|
111
|
+
now,
|
|
112
|
+
timestamp,
|
|
113
|
+
dateStamp,
|
|
114
|
+
chatDocument,
|
|
115
|
+
message,
|
|
116
|
+
me,
|
|
117
|
+
msg,
|
|
118
|
+
_args2 = arguments;
|
|
119
|
+
return _regenerator["default"].wrap(function _callee2$(_context2) {
|
|
120
|
+
while (1) {
|
|
121
|
+
switch (_context2.prev = _context2.next) {
|
|
122
|
+
case 0:
|
|
123
|
+
oldMsg = _args2.length > 1 && _args2[1] !== undefined ? _args2[1] : null;
|
|
124
|
+
deleteIt = _args2.length > 2 ? _args2[2] : undefined;
|
|
125
|
+
sts = [];
|
|
126
|
+
now = new Date();
|
|
127
|
+
timestamp = '' + now.getTime();
|
|
128
|
+
dateStamp = $rdf.term(now);
|
|
129
|
+
chatDocument = oldMsg ? oldMsg.doc() : this.dateFolder.leafDocumentFromDate(now);
|
|
130
|
+
message = _logic.store.sym(chatDocument.uri + '#' + 'Msg' + timestamp); // const content = store.literal(text)
|
|
131
|
+
|
|
132
|
+
me = _index.authn.currentUser(); // If already logged on
|
|
133
|
+
|
|
134
|
+
if (oldMsg) {
|
|
135
|
+
// edit message replaces old one
|
|
136
|
+
sts.push($rdf.st(mostRecentVersion(oldMsg), ns.dct('isReplacedBy'), message, chatDocument));
|
|
137
|
+
|
|
138
|
+
if (deleteIt) {
|
|
139
|
+
sts.push($rdf.st(message, ns.schema('dateDeleted'), dateStamp, chatDocument));
|
|
140
|
+
}
|
|
141
|
+
} else {
|
|
142
|
+
// link new message to channel
|
|
143
|
+
sts.push($rdf.st(this.channel, ns.wf('message'), message, chatDocument));
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
sts.push($rdf.st(message, ns.sioc('content'), _logic.store.literal(text), chatDocument));
|
|
147
|
+
sts.push($rdf.st(message, ns.dct('created'), dateStamp, chatDocument));
|
|
148
|
+
|
|
149
|
+
if (me) {
|
|
150
|
+
sts.push($rdf.st(message, ns.foaf('maker'), me, chatDocument));
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
_context2.prev = 13;
|
|
154
|
+
_context2.next = 16;
|
|
155
|
+
return _logic.store.updater.update([], sts);
|
|
156
|
+
|
|
157
|
+
case 16:
|
|
158
|
+
_context2.next = 24;
|
|
159
|
+
break;
|
|
160
|
+
|
|
161
|
+
case 18:
|
|
162
|
+
_context2.prev = 18;
|
|
163
|
+
_context2.t0 = _context2["catch"](13);
|
|
164
|
+
msg = 'Error saving chat message: ' + _context2.t0;
|
|
165
|
+
debug.warn(msg);
|
|
166
|
+
alert(msg);
|
|
167
|
+
throw new Error(msg);
|
|
168
|
+
|
|
169
|
+
case 24:
|
|
170
|
+
return _context2.abrupt("return", message);
|
|
171
|
+
|
|
172
|
+
case 25:
|
|
173
|
+
case "end":
|
|
174
|
+
return _context2.stop();
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}, _callee2, this, [[13, 18]]);
|
|
178
|
+
}));
|
|
179
|
+
|
|
180
|
+
function updateMessage(_x2) {
|
|
181
|
+
return _updateMessage.apply(this, arguments);
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
return updateMessage;
|
|
185
|
+
}()
|
|
186
|
+
/* Mark a message as deleted
|
|
187
|
+
* Wee add a new version of the message,m witha deletion flag (deletion date)
|
|
188
|
+
* so that the deletion can be revoked by adding another non-deleted update
|
|
189
|
+
*/
|
|
190
|
+
|
|
191
|
+
}, {
|
|
192
|
+
key: "deleteMessage",
|
|
193
|
+
value: function () {
|
|
194
|
+
var _deleteMessage = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3(message) {
|
|
195
|
+
return _regenerator["default"].wrap(function _callee3$(_context3) {
|
|
196
|
+
while (1) {
|
|
197
|
+
switch (_context3.prev = _context3.next) {
|
|
198
|
+
case 0:
|
|
199
|
+
return _context3.abrupt("return", this.updateMessage('(message deleted)', message, true));
|
|
200
|
+
|
|
201
|
+
case 1:
|
|
202
|
+
case "end":
|
|
203
|
+
return _context3.stop();
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
}, _callee3, this);
|
|
207
|
+
}));
|
|
208
|
+
|
|
209
|
+
function deleteMessage(_x3) {
|
|
210
|
+
return _deleteMessage.apply(this, arguments);
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
return deleteMessage;
|
|
214
|
+
}()
|
|
215
|
+
}]);
|
|
216
|
+
return ChatChannel;
|
|
217
|
+
}(); // class ChatChannel
|
|
218
|
+
|
|
219
|
+
|
|
220
|
+
exports.ChatChannel = ChatChannel;
|
|
221
|
+
|
|
222
|
+
function originalVersion(message) {
|
|
223
|
+
var msg = message;
|
|
224
|
+
|
|
225
|
+
while (msg) {
|
|
226
|
+
message = msg;
|
|
227
|
+
msg = _logic.store.any(null, ns.dct('isReplacedBy'), message, message.doc());
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
return message;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
function mostRecentVersion(message) {
|
|
234
|
+
var msg = message;
|
|
235
|
+
|
|
236
|
+
while (msg) {
|
|
237
|
+
message = msg;
|
|
238
|
+
msg = _logic.store.any(message, ns.dct('isReplacedBy'), null, message.doc());
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
return message;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
function isDeleted(message) {
|
|
245
|
+
return _logic.store.holds(message, ns.schema('dateDeleted'), null, message.doc());
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
function isReplaced(message) {
|
|
249
|
+
return _logic.store.holds(message, ns.dct('isReplacedBy'), null, message.doc());
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
function isHidden(message) {
|
|
253
|
+
return this.isDeleted(message) || this.isReplaced(message);
|
|
254
|
+
} // A Nickname for a person
|
|
255
|
+
|
|
256
|
+
|
|
257
|
+
function nick(person) {
|
|
258
|
+
var s = _logic.store.any(person, ns.foaf('nick'));
|
|
259
|
+
|
|
260
|
+
if (s) return '' + s.value;
|
|
261
|
+
return '' + utils.label(person);
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
function _createIfNotExists(_x4) {
|
|
265
|
+
return _createIfNotExists2.apply(this, arguments);
|
|
266
|
+
} // ends
|
|
267
|
+
|
|
268
|
+
|
|
269
|
+
function _createIfNotExists2() {
|
|
270
|
+
_createIfNotExists2 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4(doc) {
|
|
271
|
+
var contentType,
|
|
272
|
+
data,
|
|
273
|
+
response,
|
|
274
|
+
_args4 = arguments;
|
|
275
|
+
return _regenerator["default"].wrap(function _callee4$(_context4) {
|
|
276
|
+
while (1) {
|
|
277
|
+
switch (_context4.prev = _context4.next) {
|
|
278
|
+
case 0:
|
|
279
|
+
contentType = _args4.length > 1 && _args4[1] !== undefined ? _args4[1] : 'text/turtle';
|
|
280
|
+
data = _args4.length > 2 && _args4[2] !== undefined ? _args4[2] : '';
|
|
281
|
+
_context4.prev = 2;
|
|
282
|
+
_context4.next = 5;
|
|
283
|
+
return _logic.store.fetcher.load(doc);
|
|
284
|
+
|
|
285
|
+
case 5:
|
|
286
|
+
response = _context4.sent;
|
|
287
|
+
_context4.next = 28;
|
|
288
|
+
break;
|
|
289
|
+
|
|
290
|
+
case 8:
|
|
291
|
+
_context4.prev = 8;
|
|
292
|
+
_context4.t0 = _context4["catch"](2);
|
|
293
|
+
|
|
294
|
+
if (!(_context4.t0.response.status === 404)) {
|
|
295
|
+
_context4.next = 26;
|
|
296
|
+
break;
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
debug.log('createIfNotExists: doc does NOT exist, will create... ' + doc);
|
|
300
|
+
_context4.prev = 12;
|
|
301
|
+
_context4.next = 15;
|
|
302
|
+
return _logic.store.fetcher.webOperation('PUT', doc.uri, {
|
|
303
|
+
data: data,
|
|
304
|
+
contentType: contentType
|
|
305
|
+
});
|
|
306
|
+
|
|
307
|
+
case 15:
|
|
308
|
+
response = _context4.sent;
|
|
309
|
+
_context4.next = 22;
|
|
310
|
+
break;
|
|
311
|
+
|
|
312
|
+
case 18:
|
|
313
|
+
_context4.prev = 18;
|
|
314
|
+
_context4.t1 = _context4["catch"](12);
|
|
315
|
+
debug.log('createIfNotExists doc FAILED: ' + doc + ': ' + _context4.t1);
|
|
316
|
+
throw _context4.t1;
|
|
317
|
+
|
|
318
|
+
case 22:
|
|
319
|
+
delete _logic.store.fetcher.requested[doc.uri]; // delete cached 404 error
|
|
320
|
+
// debug.log('createIfNotExists doc created ok ' + doc)
|
|
321
|
+
|
|
322
|
+
return _context4.abrupt("return", response);
|
|
323
|
+
|
|
324
|
+
case 26:
|
|
325
|
+
debug.log('createIfNotExists doc load error NOT 404: ' + doc + ': ' + _context4.t0);
|
|
326
|
+
throw _context4.t0;
|
|
327
|
+
|
|
328
|
+
case 28:
|
|
329
|
+
return _context4.abrupt("return", response);
|
|
330
|
+
|
|
331
|
+
case 29:
|
|
332
|
+
case "end":
|
|
333
|
+
return _context4.stop();
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
}, _callee4, null, [[2, 8], [12, 18]]);
|
|
337
|
+
}));
|
|
338
|
+
return _createIfNotExists2.apply(this, arguments);
|
|
339
|
+
}
|
|
340
|
+
//# sourceMappingURL=chatLogic.js.map
|