solid-ui 2.4.15 → 2.4.16-10b69a63
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 +4 -9
- 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/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/participation.d.ts.map +1 -1
- package/lib/participation.js +59 -30
- package/lib/participation.js.map +1 -1
- package/lib/versionInfo.js +10 -10
- package/lib/versionInfo.js.map +1 -1
- package/lib/webpack-bundle.js +1464 -1019
- package/lib/webpack-bundle.js.map +1 -1
- 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/forms/autocomplete/publicData.d.ts +1 -0
- package/lib/widgets/forms/autocomplete/publicData.d.ts.map +1 -1
- package/lib/widgets/forms/autocomplete/publicData.js +1 -0
- package/lib/widgets/forms/autocomplete/publicData.js.map +1 -1
- package/lib/widgets/forms.js +1 -1
- package/lib/widgets/forms.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -52,14 +52,9 @@ document.body.appendChild(aclControlBox)
|
|
|
52
52
|
|
|
53
53
|
|
|
54
54
|
## Documentation
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
See https://solid.github.io/solid-ui/Documentation/api/ for the API documentation.
|
|
59
|
-
|
|
60
|
-
### Components
|
|
61
|
-
|
|
62
|
-
The UI components are presented in a [storybook](http://solid.github.io/solid-ui/examples/storybook/).
|
|
55
|
+
- [talk presentation](https://solid.github.io/solid-ui/Documentation/talks/FormsTalk.html)
|
|
56
|
+
- API https://solid.github.io/solid-ui/Documentation/api/ for the API documentation.
|
|
57
|
+
- The UI components are presented in a [storybook](http://solid.github.io/solid-ui/examples/storybook/).
|
|
63
58
|
|
|
64
59
|
## Overview
|
|
65
60
|
This has been a place to put any functionality from solid views which has been generalized to be usable in other views.
|
|
@@ -109,4 +104,4 @@ npm run storybook
|
|
|
109
104
|
If there is no story for the component yet, add a new one to `./src/stories`.
|
|
110
105
|
|
|
111
106
|
When you want to test the component within a solid-pane, you can use the [development mode of solid-panes](https://github.com/solid/solid-panes#development) or
|
|
112
|
-
[mashlib-dev](https://github.com/solid/mashlib-dev).
|
|
107
|
+
[mashlib-dev](https://github.com/solid/mashlib-dev).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"access-controller.d.ts","sourceRoot":"","sources":["../../src/acl/access-controller.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,
|
|
1
|
+
{"version":3,"file":"access-controller.d.ts","sourceRoot":"","sources":["../../src/acl/access-controller.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAkB,SAAS,EAAiB,MAAM,QAAQ,CAAA;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAKlD;;GAEG;AACH,qBAAa,gBAAgB;IASlB,OAAO,EAAE,SAAS;IAClB,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,kBAAkB;IAClC,OAAO,CAAC,aAAa;IACd,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAC/B,iBAAiB,EAAE,OAAO;IACjC,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,wBAAwB;IACzB,KAAK;IACL,GAAG;IApBL,SAAS,EAAE,YAAY,CAAA;IACvB,aAAa,EAAE,YAAY,GAAG,IAAI,CAAA;IACzC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAa;IACzC,OAAO,CAAC,eAAe,CAAS;gBAGvB,OAAO,EAAE,SAAS,EAClB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,kBAAkB,EAC1B,aAAa,EAAE,WAAW,EAC3B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,iBAAiB,EAAE,OAAO,EACzB,SAAS,EAAE,SAAS,EACpB,YAAY,EAAE,SAAS,EACvB,aAAa,EAAE,SAAS,GAAG,IAAI,EAC/B,aAAa,EAAE,SAAS,GAAG,IAAI,EAC/B,wBAAwB,EAAE,SAAS,GAAG,SAAS,EAChD,KAAK,KAAA,EACL,GAAG,KAAA;IAmBZ,IAAW,UAAU,IAAK,OAAO,CAEhC;IAEM,MAAM,IAAK,WAAW;IA6B7B,OAAO,CAAC,0BAA0B;IAUlC,OAAO,CAAC,uBAAuB;IAU/B,OAAO,CAAC,2BAA2B;IAgBnC,OAAO,CAAC,8BAA8B;IAiB/B,qBAAqB,CAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAa7C,YAAY,CAAE,OAAO,EAAE,MAAM,GAAG,IAAI;YAM7B,OAAO;YAmBP,WAAW;YAKX,UAAU;YAiBV,cAAc;IAcrB,IAAI,IAAK,OAAO,CAAC,IAAI,CAAC;CA0C9B"}
|
|
@@ -423,8 +423,12 @@ var AccessController = /*#__PURE__*/function () {
|
|
|
423
423
|
} else {
|
|
424
424
|
// Linked controls
|
|
425
425
|
(0, _acl.makeACLGraphbyCombo)(newAClGraph, this.targetDoc, this.mainCombo.byCombo, this.targetACLDoc, true, true);
|
|
426
|
-
}
|
|
426
|
+
} // add authenticated fetcher
|
|
427
|
+
|
|
427
428
|
|
|
429
|
+
newAClGraph.fetcher = (0, _rdflib.fetcher)(newAClGraph, {
|
|
430
|
+
fetch: this.store.fetcher._fetch
|
|
431
|
+
});
|
|
428
432
|
var updater = newAClGraph.updater || new _rdflib.UpdateManager(newAClGraph); // save ACL resource
|
|
429
433
|
|
|
430
434
|
return new Promise(function (resolve, reject) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/acl/access-controller.ts"],"names":["AccessController","subject","noun","context","statusElement","classes","targetIsProtected","targetDoc","targetACLDoc","defaultHolder","defaultACLDoc","prospectiveDefaultHolder","store","dom","rootElement","createElement","classList","add","aclGroupContent","isContainer","uri","slice","isUsingDefaults","aclDefaultStore","mainCombo","AccessGroups","defaults","defaultsCombo","defaultsDiffer","aclMap","innerHTML","renderStatus","defaultHolderLink","appendChild","href","innerText","render","renderRemoveDefaultsController","isEditable","renderAddDefaultsController","renderAddAclsController","renderRemoveAclsController","useDefaultButton","utils","label","bigButton","addEventListener","removeAcls","then","error","addAclButton","addAcls","containerElement","defaultsController","noticeElement","defaultsControllerNotice","button","addDefaults","removeDefaults","message","aclControlBoxStatusRevealed","temporaryStatusInit","setTimeout","temporaryStatusEnd","toggle","debug","Promise","reject","aclGraph","statements","forEach","st","predicate","object","fetcher","putBack","resolve","warn","fallbackCombo","save","newAClGraph","byCombo","updater","UpdateManager","put","statementsMatching","undefined","ok","Error","unload","requested","log"],"mappings":"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","sourcesContent":["/**\n * Contains the [[AccessController]] class\n * @packageDocumentation\n */\n\nimport { adoptACLDefault, getProspectiveHolder, makeACLGraphbyCombo, sameACL } from './acl'\nimport { graph, NamedNode, UpdateManager } from 'rdflib'\nimport { AccessGroups } from './access-groups'\nimport { DataBrowserContext } from 'pane-registry'\nimport { shortNameForFolder } from './acl-control'\nimport * as utils from '../utils'\nimport * as debug from '../debug'\n\n/**\n * Rendered HTML component used in the databrowser's Sharing pane.\n */\nexport class AccessController {\n public mainCombo: AccessGroups\n public defaultsCombo: AccessGroups | null\n private readonly isContainer: boolean\n private defaultsDiffer: boolean\n private readonly rootElement: HTMLElement\n private isUsingDefaults: boolean\n\n constructor (\n public subject: NamedNode,\n public noun: string,\n public context: DataBrowserContext,\n private statusElement: HTMLElement,\n public classes: Record<string, string>,\n public targetIsProtected: boolean,\n private targetDoc: NamedNode,\n private targetACLDoc: NamedNode,\n private defaultHolder: NamedNode | null,\n private defaultACLDoc: NamedNode | null,\n private prospectiveDefaultHolder: NamedNode | undefined,\n public store,\n public dom\n ) {\n this.rootElement = dom.createElement('div')\n this.rootElement.classList.add(classes.aclGroupContent)\n this.isContainer = targetDoc.uri.slice(-1) === '/' // Give default for all directories\n if (defaultHolder && defaultACLDoc) {\n this.isUsingDefaults = true\n const aclDefaultStore = adoptACLDefault(this.targetDoc, targetACLDoc, defaultHolder, defaultACLDoc)\n this.mainCombo = new AccessGroups(targetDoc, targetACLDoc, this, aclDefaultStore, { defaults: this.isContainer })\n this.defaultsCombo = null\n this.defaultsDiffer = false\n } else {\n this.isUsingDefaults = false\n this.mainCombo = new AccessGroups(targetDoc, targetACLDoc, this, store)\n this.defaultsCombo = new AccessGroups(targetDoc, targetACLDoc, this, store, { defaults: this.isContainer })\n this.defaultsDiffer = !sameACL(this.mainCombo.aclMap, this.defaultsCombo.aclMap)\n }\n }\n\n public get isEditable (): boolean {\n return !this.isUsingDefaults\n }\n\n public render (): HTMLElement {\n this.rootElement.innerHTML = ''\n if (this.isUsingDefaults) {\n this.renderStatus(`The sharing for this ${this.noun} is the default for folder `)\n if (this.defaultHolder) {\n const defaultHolderLink = this.statusElement.appendChild(this.dom.createElement('a'))\n defaultHolderLink.href = this.defaultHolder.uri\n defaultHolderLink.innerText = shortNameForFolder(this.defaultHolder)\n }\n } else if (!this.defaultsDiffer && this.isContainer) {\n this.renderStatus('This is also the default for things in this folder.')\n } else {\n this.renderStatus('')\n }\n this.rootElement.appendChild(this.mainCombo.render())\n if (this.defaultsCombo && this.defaultsDiffer) {\n this.rootElement.appendChild(this.renderRemoveDefaultsController())\n this.rootElement.appendChild(this.defaultsCombo.render())\n } else if (this.isEditable && this.isContainer) {\n this.rootElement.appendChild(this.renderAddDefaultsController())\n }\n if (!this.targetIsProtected && this.isUsingDefaults) {\n this.rootElement.appendChild(this.renderAddAclsController())\n } else if (!this.targetIsProtected) {\n this.rootElement.appendChild(this.renderRemoveAclsController())\n }\n return this.rootElement\n }\n\n private renderRemoveAclsController (): HTMLElement {\n const useDefaultButton = this.dom.createElement('button')\n useDefaultButton.innerText = `Remove custom sharing settings for this ${this.noun} -- just use default${this.prospectiveDefaultHolder ? ` for ${utils.label(this.prospectiveDefaultHolder)}` : ''}`\n useDefaultButton.classList.add(this.classes.bigButton)\n useDefaultButton.addEventListener('click', () => this.removeAcls()\n .then(() => this.render())\n .catch(error => this.renderStatus(error)))\n return useDefaultButton\n }\n\n private renderAddAclsController (): HTMLElement {\n const addAclButton = this.dom.createElement('button')\n addAclButton.innerText = `Set specific sharing for this ${this.noun}`\n addAclButton.classList.add(this.classes.bigButton)\n addAclButton.addEventListener('click', () => this.addAcls()\n .then(() => this.render())\n .catch(error => this.renderStatus(error)))\n return addAclButton\n }\n\n private renderAddDefaultsController (): HTMLElement {\n const containerElement = this.dom.createElement('div')\n containerElement.classList.add(this.classes.defaultsController)\n\n const noticeElement = containerElement.appendChild(this.dom.createElement('div'))\n noticeElement.innerText = 'Sharing for things within the folder currently tracks sharing for the folder.'\n noticeElement.classList.add(this.classes.defaultsControllerNotice)\n\n const button = containerElement.appendChild(this.dom.createElement('button'))\n button.innerText = 'Set the sharing of folder contents separately from the sharing for the folder'\n button.classList.add(this.classes.bigButton)\n button.addEventListener('click', () => this.addDefaults()\n .then(() => this.render()))\n return containerElement\n }\n\n private renderRemoveDefaultsController (): HTMLElement {\n const containerElement = this.dom.createElement('div')\n containerElement.classList.add(this.classes.defaultsController)\n\n const noticeElement = containerElement.appendChild(this.dom.createElement('div'))\n noticeElement.innerText = 'Access to things within this folder:'\n noticeElement.classList.add(this.classes.defaultsControllerNotice)\n\n const button = containerElement.appendChild(this.dom.createElement('button'))\n button.innerText = 'Set default for folder contents to just track the sharing for the folder'\n button.classList.add(this.classes.bigButton)\n button.addEventListener('click', () => this.removeDefaults()\n .then(() => this.render())\n .catch(error => this.renderStatus(error)))\n return containerElement\n }\n\n public renderTemporaryStatus (message: string): void {\n // @@ TODO Introduce better system for error notification to user https://github.com/solid/mashlib/issues/87\n this.statusElement.classList.add(this.classes.aclControlBoxStatusRevealed)\n this.statusElement.innerText = message\n this.statusElement.classList.add(this.classes.temporaryStatusInit)\n setTimeout(() => {\n this.statusElement.classList.add(this.classes.temporaryStatusEnd)\n })\n setTimeout(() => {\n this.statusElement.innerText = ''\n }, 5000)\n }\n\n public renderStatus (message: string): void {\n // @@ TODO Introduce better system for error notification to user https://github.com/solid/mashlib/issues/87\n this.statusElement.classList.toggle(this.classes.aclControlBoxStatusRevealed, !!message)\n this.statusElement.innerText = message\n }\n\n private async addAcls (): Promise<void> {\n if (!this.defaultHolder || !this.defaultACLDoc) {\n const message = 'Unable to find defaults to copy'\n debug.error(message)\n return Promise.reject(message)\n }\n const aclGraph = adoptACLDefault(this.targetDoc, this.targetACLDoc, this.defaultHolder, this.defaultACLDoc)\n aclGraph.statements.forEach(st => this.store.add(st.subject, st.predicate, st.object, this.targetACLDoc))\n try {\n await this.store.fetcher.putBack(this.targetACLDoc)\n this.isUsingDefaults = false\n return Promise.resolve()\n } catch (error) {\n const message = ` Error writing back access control file! ${error}`\n debug.error(message)\n return Promise.reject(message)\n }\n }\n\n private async addDefaults (): Promise<void> {\n this.defaultsCombo = new AccessGroups(this.targetDoc, this.targetACLDoc, this, this.store, { defaults: true })\n this.defaultsDiffer = true\n }\n\n private async removeAcls (): Promise<void> {\n try {\n await this.store.fetcher.delete(this.targetACLDoc.uri, {})\n this.isUsingDefaults = true\n try {\n this.prospectiveDefaultHolder = await getProspectiveHolder(this.targetDoc.uri)\n } catch (error) {\n // No need to show this error in status, but good to warn about it in console\n debug.warn(error)\n }\n } catch (error) {\n const message = `Error deleting access control file: ${this.targetACLDoc}: ${error}`\n debug.error(message)\n return Promise.reject(message)\n }\n }\n\n private async removeDefaults (): Promise<void> {\n const fallbackCombo = this.defaultsCombo\n try {\n this.defaultsCombo = null\n this.defaultsDiffer = false\n await this.save()\n } catch (error) {\n this.defaultsCombo = fallbackCombo\n this.defaultsDiffer = true\n debug.error(error)\n return Promise.reject(error)\n }\n }\n\n public save (): Promise<void> {\n // build graph\n const newAClGraph = graph()\n if (!this.isContainer) {\n makeACLGraphbyCombo(newAClGraph, this.targetDoc, this.mainCombo.byCombo, this.targetACLDoc, true)\n } else if (this.defaultsCombo && this.defaultsDiffer) {\n // Pair of controls\n makeACLGraphbyCombo(newAClGraph, this.targetDoc, this.mainCombo.byCombo, this.targetACLDoc, true)\n makeACLGraphbyCombo(newAClGraph, this.targetDoc, this.defaultsCombo.byCombo, this.targetACLDoc, false, true)\n } else {\n // Linked controls\n makeACLGraphbyCombo(newAClGraph, this.targetDoc, this.mainCombo.byCombo, this.targetACLDoc, true, true)\n }\n\n const updater = newAClGraph.updater || new UpdateManager(newAClGraph)\n\n // save ACL resource\n return new Promise((resolve, reject) => {\n updater.put(\n this.targetACLDoc,\n newAClGraph.statementsMatching(undefined, undefined, undefined, this.targetACLDoc),\n 'text/turtle',\n (uri, ok, message) => {\n if (!ok) {\n return reject(new Error(`ACL file save failed: ${message}`))\n }\n this.store.fetcher.unload(this.targetACLDoc)\n this.store.add(newAClGraph.statements)\n this.store.fetcher.requested[this.targetACLDoc.uri] = 'done' // missing: save headers\n this.mainCombo.store = this.store\n if (this.defaultsCombo) {\n this.defaultsCombo.store = this.store\n }\n this.defaultsDiffer = !!this.defaultsCombo && !sameACL(this.mainCombo.aclMap, this.defaultsCombo.aclMap)\n debug.log('ACL modification: success!')\n resolve()\n }\n )\n })\n }\n}\n"],"file":"access-controller.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/acl/access-controller.ts"],"names":["AccessController","subject","noun","context","statusElement","classes","targetIsProtected","targetDoc","targetACLDoc","defaultHolder","defaultACLDoc","prospectiveDefaultHolder","store","dom","rootElement","createElement","classList","add","aclGroupContent","isContainer","uri","slice","isUsingDefaults","aclDefaultStore","mainCombo","AccessGroups","defaults","defaultsCombo","defaultsDiffer","aclMap","innerHTML","renderStatus","defaultHolderLink","appendChild","href","innerText","render","renderRemoveDefaultsController","isEditable","renderAddDefaultsController","renderAddAclsController","renderRemoveAclsController","useDefaultButton","utils","label","bigButton","addEventListener","removeAcls","then","error","addAclButton","addAcls","containerElement","defaultsController","noticeElement","defaultsControllerNotice","button","addDefaults","removeDefaults","message","aclControlBoxStatusRevealed","temporaryStatusInit","setTimeout","temporaryStatusEnd","toggle","debug","Promise","reject","aclGraph","statements","forEach","st","predicate","object","fetcher","putBack","resolve","warn","fallbackCombo","save","newAClGraph","byCombo","fetch","_fetch","updater","UpdateManager","put","statementsMatching","undefined","ok","Error","unload","requested","log"],"mappings":"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","sourcesContent":["/**\n * Contains the [[AccessController]] class\n * @packageDocumentation\n */\n\nimport { adoptACLDefault, getProspectiveHolder, makeACLGraphbyCombo, sameACL } from './acl'\nimport { fetcher, graph, NamedNode, UpdateManager } from 'rdflib'\nimport { AccessGroups } from './access-groups'\nimport { DataBrowserContext } from 'pane-registry'\nimport { shortNameForFolder } from './acl-control'\nimport * as utils from '../utils'\nimport * as debug from '../debug'\n\n/**\n * Rendered HTML component used in the databrowser's Sharing pane.\n */\nexport class AccessController {\n public mainCombo: AccessGroups\n public defaultsCombo: AccessGroups | null\n private readonly isContainer: boolean\n private defaultsDiffer: boolean\n private readonly rootElement: HTMLElement\n private isUsingDefaults: boolean\n\n constructor (\n public subject: NamedNode,\n public noun: string,\n public context: DataBrowserContext,\n private statusElement: HTMLElement,\n public classes: Record<string, string>,\n public targetIsProtected: boolean,\n private targetDoc: NamedNode,\n private targetACLDoc: NamedNode,\n private defaultHolder: NamedNode | null,\n private defaultACLDoc: NamedNode | null,\n private prospectiveDefaultHolder: NamedNode | undefined,\n public store,\n public dom\n ) {\n this.rootElement = dom.createElement('div')\n this.rootElement.classList.add(classes.aclGroupContent)\n this.isContainer = targetDoc.uri.slice(-1) === '/' // Give default for all directories\n if (defaultHolder && defaultACLDoc) {\n this.isUsingDefaults = true\n const aclDefaultStore = adoptACLDefault(this.targetDoc, targetACLDoc, defaultHolder, defaultACLDoc)\n this.mainCombo = new AccessGroups(targetDoc, targetACLDoc, this, aclDefaultStore, { defaults: this.isContainer })\n this.defaultsCombo = null\n this.defaultsDiffer = false\n } else {\n this.isUsingDefaults = false\n this.mainCombo = new AccessGroups(targetDoc, targetACLDoc, this, store)\n this.defaultsCombo = new AccessGroups(targetDoc, targetACLDoc, this, store, { defaults: this.isContainer })\n this.defaultsDiffer = !sameACL(this.mainCombo.aclMap, this.defaultsCombo.aclMap)\n }\n }\n\n public get isEditable (): boolean {\n return !this.isUsingDefaults\n }\n\n public render (): HTMLElement {\n this.rootElement.innerHTML = ''\n if (this.isUsingDefaults) {\n this.renderStatus(`The sharing for this ${this.noun} is the default for folder `)\n if (this.defaultHolder) {\n const defaultHolderLink = this.statusElement.appendChild(this.dom.createElement('a'))\n defaultHolderLink.href = this.defaultHolder.uri\n defaultHolderLink.innerText = shortNameForFolder(this.defaultHolder)\n }\n } else if (!this.defaultsDiffer && this.isContainer) {\n this.renderStatus('This is also the default for things in this folder.')\n } else {\n this.renderStatus('')\n }\n this.rootElement.appendChild(this.mainCombo.render())\n if (this.defaultsCombo && this.defaultsDiffer) {\n this.rootElement.appendChild(this.renderRemoveDefaultsController())\n this.rootElement.appendChild(this.defaultsCombo.render())\n } else if (this.isEditable && this.isContainer) {\n this.rootElement.appendChild(this.renderAddDefaultsController())\n }\n if (!this.targetIsProtected && this.isUsingDefaults) {\n this.rootElement.appendChild(this.renderAddAclsController())\n } else if (!this.targetIsProtected) {\n this.rootElement.appendChild(this.renderRemoveAclsController())\n }\n return this.rootElement\n }\n\n private renderRemoveAclsController (): HTMLElement {\n const useDefaultButton = this.dom.createElement('button')\n useDefaultButton.innerText = `Remove custom sharing settings for this ${this.noun} -- just use default${this.prospectiveDefaultHolder ? ` for ${utils.label(this.prospectiveDefaultHolder)}` : ''}`\n useDefaultButton.classList.add(this.classes.bigButton)\n useDefaultButton.addEventListener('click', () => this.removeAcls()\n .then(() => this.render())\n .catch(error => this.renderStatus(error)))\n return useDefaultButton\n }\n\n private renderAddAclsController (): HTMLElement {\n const addAclButton = this.dom.createElement('button')\n addAclButton.innerText = `Set specific sharing for this ${this.noun}`\n addAclButton.classList.add(this.classes.bigButton)\n addAclButton.addEventListener('click', () => this.addAcls()\n .then(() => this.render())\n .catch(error => this.renderStatus(error)))\n return addAclButton\n }\n\n private renderAddDefaultsController (): HTMLElement {\n const containerElement = this.dom.createElement('div')\n containerElement.classList.add(this.classes.defaultsController)\n\n const noticeElement = containerElement.appendChild(this.dom.createElement('div'))\n noticeElement.innerText = 'Sharing for things within the folder currently tracks sharing for the folder.'\n noticeElement.classList.add(this.classes.defaultsControllerNotice)\n\n const button = containerElement.appendChild(this.dom.createElement('button'))\n button.innerText = 'Set the sharing of folder contents separately from the sharing for the folder'\n button.classList.add(this.classes.bigButton)\n button.addEventListener('click', () => this.addDefaults()\n .then(() => this.render()))\n return containerElement\n }\n\n private renderRemoveDefaultsController (): HTMLElement {\n const containerElement = this.dom.createElement('div')\n containerElement.classList.add(this.classes.defaultsController)\n\n const noticeElement = containerElement.appendChild(this.dom.createElement('div'))\n noticeElement.innerText = 'Access to things within this folder:'\n noticeElement.classList.add(this.classes.defaultsControllerNotice)\n\n const button = containerElement.appendChild(this.dom.createElement('button'))\n button.innerText = 'Set default for folder contents to just track the sharing for the folder'\n button.classList.add(this.classes.bigButton)\n button.addEventListener('click', () => this.removeDefaults()\n .then(() => this.render())\n .catch(error => this.renderStatus(error)))\n return containerElement\n }\n\n public renderTemporaryStatus (message: string): void {\n // @@ TODO Introduce better system for error notification to user https://github.com/solid/mashlib/issues/87\n this.statusElement.classList.add(this.classes.aclControlBoxStatusRevealed)\n this.statusElement.innerText = message\n this.statusElement.classList.add(this.classes.temporaryStatusInit)\n setTimeout(() => {\n this.statusElement.classList.add(this.classes.temporaryStatusEnd)\n })\n setTimeout(() => {\n this.statusElement.innerText = ''\n }, 5000)\n }\n\n public renderStatus (message: string): void {\n // @@ TODO Introduce better system for error notification to user https://github.com/solid/mashlib/issues/87\n this.statusElement.classList.toggle(this.classes.aclControlBoxStatusRevealed, !!message)\n this.statusElement.innerText = message\n }\n\n private async addAcls (): Promise<void> {\n if (!this.defaultHolder || !this.defaultACLDoc) {\n const message = 'Unable to find defaults to copy'\n debug.error(message)\n return Promise.reject(message)\n }\n const aclGraph = adoptACLDefault(this.targetDoc, this.targetACLDoc, this.defaultHolder, this.defaultACLDoc)\n aclGraph.statements.forEach(st => this.store.add(st.subject, st.predicate, st.object, this.targetACLDoc))\n try {\n await this.store.fetcher.putBack(this.targetACLDoc)\n this.isUsingDefaults = false\n return Promise.resolve()\n } catch (error) {\n const message = ` Error writing back access control file! ${error}`\n debug.error(message)\n return Promise.reject(message)\n }\n }\n\n private async addDefaults (): Promise<void> {\n this.defaultsCombo = new AccessGroups(this.targetDoc, this.targetACLDoc, this, this.store, { defaults: true })\n this.defaultsDiffer = true\n }\n\n private async removeAcls (): Promise<void> {\n try {\n await this.store.fetcher.delete(this.targetACLDoc.uri, {})\n this.isUsingDefaults = true\n try {\n this.prospectiveDefaultHolder = await getProspectiveHolder(this.targetDoc.uri)\n } catch (error) {\n // No need to show this error in status, but good to warn about it in console\n debug.warn(error)\n }\n } catch (error) {\n const message = `Error deleting access control file: ${this.targetACLDoc}: ${error}`\n debug.error(message)\n return Promise.reject(message)\n }\n }\n\n private async removeDefaults (): Promise<void> {\n const fallbackCombo = this.defaultsCombo\n try {\n this.defaultsCombo = null\n this.defaultsDiffer = false\n await this.save()\n } catch (error) {\n this.defaultsCombo = fallbackCombo\n this.defaultsDiffer = true\n debug.error(error)\n return Promise.reject(error)\n }\n }\n\n public save (): Promise<void> {\n // build graph\n const newAClGraph = graph()\n if (!this.isContainer) {\n makeACLGraphbyCombo(newAClGraph, this.targetDoc, this.mainCombo.byCombo, this.targetACLDoc, true)\n } else if (this.defaultsCombo && this.defaultsDiffer) {\n // Pair of controls\n makeACLGraphbyCombo(newAClGraph, this.targetDoc, this.mainCombo.byCombo, this.targetACLDoc, true)\n makeACLGraphbyCombo(newAClGraph, this.targetDoc, this.defaultsCombo.byCombo, this.targetACLDoc, false, true)\n } else {\n // Linked controls\n makeACLGraphbyCombo(newAClGraph, this.targetDoc, this.mainCombo.byCombo, this.targetACLDoc, true, true)\n }\n\n // add authenticated fetcher\n newAClGraph.fetcher = fetcher(newAClGraph, { fetch: this.store.fetcher._fetch })\n const updater = newAClGraph.updater || new UpdateManager(newAClGraph)\n\n // save ACL resource\n return new Promise((resolve, reject) => {\n updater.put(\n this.targetACLDoc,\n newAClGraph.statementsMatching(undefined, undefined, undefined, this.targetACLDoc),\n 'text/turtle',\n (uri, ok, message) => {\n if (!ok) {\n return reject(new Error(`ACL file save failed: ${message}`))\n }\n this.store.fetcher.unload(this.targetACLDoc)\n this.store.add(newAClGraph.statements)\n this.store.fetcher.requested[this.targetACLDoc.uri] = 'done' // missing: save headers\n this.mainCombo.store = this.store\n if (this.defaultsCombo) {\n this.defaultsCombo.store = this.store\n }\n this.defaultsDiffer = !!this.defaultsCombo && !sameACL(this.mainCombo.aclMap, this.defaultsCombo.aclMap)\n debug.log('ACL modification: success!')\n resolve()\n }\n )\n })\n }\n}\n"],"file":"access-controller.js"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* and [[AccessGroupsOptions]] classes
|
|
4
4
|
* @packageDocumentation
|
|
5
5
|
*/
|
|
6
|
-
import {
|
|
6
|
+
import { NamedNode, LiveStore } from 'rdflib';
|
|
7
7
|
import { AccessController } from './access-controller';
|
|
8
8
|
import { AgentMapMap, ComboList } from './types';
|
|
9
9
|
/**
|
|
@@ -27,7 +27,7 @@ export declare class AccessGroups {
|
|
|
27
27
|
private readonly addAgentButton;
|
|
28
28
|
private readonly rootElement;
|
|
29
29
|
private _store;
|
|
30
|
-
constructor(doc: NamedNode, aclDoc: NamedNode, controller: AccessController, store:
|
|
30
|
+
constructor(doc: NamedNode, aclDoc: NamedNode, controller: AccessController, store: LiveStore, options?: AccessGroupsOptions);
|
|
31
31
|
get store(): LiveStore;
|
|
32
32
|
set store(store: LiveStore);
|
|
33
33
|
render(): HTMLElement;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"access-groups.d.ts","sourceRoot":"","sources":["../../src/acl/access-groups.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"access-groups.d.ts","sourceRoot":"","sources":["../../src/acl/access-groups.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAO,SAAS,EAAE,MAAM,QAAQ,CAAA;AAIlD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,EAAE,WAAW,EAAE,SAAS,EAAsB,MAAM,SAAS,CAAA;AAgCpE;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED;;;GAGG;AACH,qBAAa,YAAY;IASrB,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,MAAM;IACP,UAAU,EAAE,gBAAgB;IAEnC,OAAO,CAAC,OAAO;IAZjB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAC3B,OAAO,EAAE,SAAS,CAAA;IAClB,MAAM,EAAE,WAAW,CAAA;IAC1B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAChD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAa;IACzC,OAAO,CAAC,MAAM,CAAW;gBAGf,GAAG,EAAE,SAAS,EACd,MAAM,EAAE,SAAS,EAClB,UAAU,EAAE,gBAAgB,EACnC,KAAK,EAAE,SAAS,EACR,OAAO,GAAE,mBAAwB;IAW3C,IAAW,KAAK,cAEf;IAED,IAAW,KAAK,CAAE,KAAK,WAAA,EAItB;IAEM,MAAM,IAAK,WAAW;IAS7B,OAAO,CAAC,YAAY;IAWpB,OAAO,CAAC,WAAW;IAWnB,OAAO,CAAC,mBAAmB;IAuB3B,OAAO,CAAC,WAAW;YAWL,WAAW;IASZ,SAAS,CAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAKrC,iBAAiB;YASjB,gBAAgB;IAqB9B,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,qBAAqB;CAY9B"}
|
package/lib/acl/access-groups.js
CHANGED
|
@@ -89,11 +89,7 @@ var AccessGroups = /*#__PURE__*/function () {
|
|
|
89
89
|
(0, _defineProperty2["default"])(this, "rootElement", void 0);
|
|
90
90
|
(0, _defineProperty2["default"])(this, "_store", void 0);
|
|
91
91
|
this.defaults = options.defaults || false;
|
|
92
|
-
|
|
93
|
-
// store.updater = new UpdateManager(store)
|
|
94
|
-
|
|
95
|
-
this._store = store; // TODO hacky, find a better solution
|
|
96
|
-
|
|
92
|
+
this._store = store;
|
|
97
93
|
this.aclMap = (0, _acl.readACL)(doc, aclDoc, store, this.defaults);
|
|
98
94
|
this.byCombo = (0, _acl.ACLbyCombination)(this.aclMap);
|
|
99
95
|
this.addAgentButton = new _addAgentButtons.AddAgentButtons(this);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/acl/access-groups.ts"],"names":["ACL","ns","acl","COLLOQUIAL","RECOMMENDED","EXPLANATION","AccessGroups","doc","aclDoc","controller","store","options","defaults","_store","aclMap","byCombo","addAgentButton","AddAgentButtons","rootElement","dom","createElement","classList","add","classes","accessGroupList","innerHTML","renderGroups","forEach","group","appendChild","isEditable","render","groupElements","comboIndex","combo","kToCombo","push","renderGroup","groupRow","accessGroupListItem","widgets","makeDropTarget","uris","handleDroppedUris","then","error","renderStatus","groupColumns","renderGroupElements","column","groupNameColumn","toggle","innerText","ktToList","groupAgentsColumn","groupAgentsTable","combos","map","pred","obj","renderAgent","agentElement","groupDescriptionElement","personRow","personTR","deleteFunction","deleteAgent","removeChild","comboToRemove","find","comboPred","comboObj","splice","indexOf","save","uri","handleDroppedUri","Promise","all","reject","secondAttempt","agent","findAgent","thing","debug","log","fetcher","load","message","Error","setACLCombo","subject","res","removeAgentFromCombos","k","i","length","y","sort","join","list","kb","types","findTypeURIs","ty","startsWith","split","endsWith","slice","vcard","sameTerm","foaf","rdf","owl","pref","any","solid"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAMA;;AACA;;AACA;;AACA;;AAGA;;AACA;;;;;;AAbA;AACA;AACA;AACA;AACA;AAWA,IAAMA,GAAG,GAAGC,EAAE,CAACC,GAAf;AAEA,IAAMC,UAAU,GAAG;AACjB,MAAI,QADa;AAEjB,KAAG,uBAFc;AAGjB,KAAG,SAHc;AAIjB,KAAG,SAJc;AAKjB,KAAG,YALc;AAMjB,KAAG;AANc,CAAnB;AASA,IAAMC,WAAW,GAAG;AAClB,MAAI,IADc;AAElB,KAAG,IAFe;AAGlB,KAAG,IAHe;AAIlB,KAAG,IAJe;AAKlB,KAAG;AALe,CAApB;AAQA,IAAMC,WAAW,GAAG;AAClB,MAAI,uCADc;AAElB,KAAG,uDAFe;AAGlB,KAAG,iCAHe;AAIlB,KAAG,uEAJe;AAKlB,KAAG,0CALe;AAMlB,KAAG;AANe,CAApB;AASA;AACA;AACA;;AAKA;AACA;AACA;AACA;IACaC,Y;AAQX,wBACUC,GADV,EAEUC,MAFV,EAGSC,UAHT,EAIEC,KAJF,EAME;AAAA,QADQC,OACR,uEADuC,EACvC;AAAA;AAAA,SALQJ,GAKR,GALQA,GAKR;AAAA,SAJQC,MAIR,GAJQA,MAIR;AAAA,SAHOC,UAGP,GAHOA,UAGP;AAAA,SADQE,OACR,GADQA,OACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,SAAKC,QAAL,GAAgBD,OAAO,CAACC,QAAR,IAAoB,KAApC;AACA,yBAAQF,KAAR,EAAe,EAAf,EAFA,CAIA;AACA;;AAEA,SAAKG,MAAL,GAAcH,KAAd,CAPA,CAOiC;;AACjC,SAAKI,MAAL,GAAc,kBAAQP,GAAR,EAAaC,MAAb,EAAqBE,KAArB,EAA4B,KAAKE,QAAjC,CAAd;AACA,SAAKG,OAAL,GAAe,2BAAiB,KAAKD,MAAtB,CAAf;AACA,SAAKE,cAAL,GAAsB,IAAIC,gCAAJ,CAAoB,IAApB,CAAtB;AACA,SAAKC,WAAL,GAAmB,KAAKT,UAAL,CAAgBU,GAAhB,CAAoBC,aAApB,CAAkC,KAAlC,CAAnB;AACA,SAAKF,WAAL,CAAiBG,SAAjB,CAA2BC,GAA3B,CAA+B,KAAKb,UAAL,CAAgBc,OAAhB,CAAwBC,eAAvD;AACD;;;;SAED,eAAoB;AAClB,aAAO,KAAKX,MAAZ;AACD,K;SAED,aAAkBH,KAAlB,EAAyB;AACvB,WAAKG,MAAL,GAAcH,KAAd;AACA,WAAKI,MAAL,GAAc,kBAAQ,KAAKP,GAAb,EAAkB,KAAKC,MAAvB,EAA+BE,KAA/B,EAAsC,KAAKE,QAA3C,CAAd;AACA,WAAKG,OAAL,GAAe,2BAAiB,KAAKD,MAAtB,CAAf;AACD;;;WAED,kBAA8B;AAAA;;AAC5B,WAAKI,WAAL,CAAiBO,SAAjB,GAA6B,EAA7B;AACA,WAAKC,YAAL,GAAoBC,OAApB,CAA4B,UAAAC,KAAK;AAAA,eAAI,KAAI,CAACV,WAAL,CAAiBW,WAAjB,CAA6BD,KAA7B,CAAJ;AAAA,OAAjC;;AACA,UAAI,KAAKnB,UAAL,CAAgBqB,UAApB,EAAgC;AAC9B,aAAKZ,WAAL,CAAiBW,WAAjB,CAA6B,KAAKb,cAAL,CAAoBe,MAApB,EAA7B;AACD;;AACD,aAAO,KAAKb,WAAZ;AACD;;;WAED,wBAAuC;AACrC,UAAMc,aAA4B,GAAG,EAArC;;AACA,WAAK,IAAIC,UAAU,GAAG,EAAtB,EAA0BA,UAAU,GAAG,CAAvC,EAA0CA,UAAU,EAApD,EAAwD;AACtD,YAAMC,KAAK,GAAGC,QAAQ,CAACF,UAAD,CAAtB;;AACA,YAAK,KAAKxB,UAAL,CAAgBqB,UAAhB,IAA8B1B,WAAW,CAAC6B,UAAD,CAA1C,IAA2D,KAAKlB,OAAL,CAAamB,KAAb,CAA/D,EAAoF;AAClFF,UAAAA,aAAa,CAACI,IAAd,CAAmB,KAAKC,WAAL,CAAiBJ,UAAjB,EAA6BC,KAA7B,CAAnB;AACD;AACF;;AACD,aAAOF,aAAP;AACD;;;WAED,qBAAqBC,UAArB,EAAyCC,KAAzC,EAAqE;AAAA;;AACnE,UAAMI,QAAQ,GAAG,KAAK7B,UAAL,CAAgBU,GAAhB,CAAoBC,aAApB,CAAkC,KAAlC,CAAjB;AACAkB,MAAAA,QAAQ,CAACjB,SAAT,CAAmBC,GAAnB,CAAuB,KAAKb,UAAL,CAAgBc,OAAhB,CAAwBgB,mBAA/C;AACAC,MAAAA,OAAO,CAACC,cAAR,CAAuBH,QAAvB,EAAiC,UAACI,IAAD;AAAA,eAAU,MAAI,CAACC,iBAAL,CAAuBD,IAAvB,EAA6BR,KAA7B,EACxCU,IADwC,CACnC;AAAA,iBAAM,MAAI,CAACnC,UAAL,CAAgBsB,MAAhB,EAAN;AAAA,SADmC,WAElC,UAAAc,KAAK;AAAA,iBAAI,MAAI,CAACpC,UAAL,CAAgBqC,YAAhB,CAA6BD,KAA7B,CAAJ;AAAA,SAF6B,CAAV;AAAA,OAAjC;AAGA,UAAME,YAAY,GAAG,KAAKC,mBAAL,CAAyBf,UAAzB,EAAqCC,KAArC,CAArB;AACAa,MAAAA,YAAY,CAACpB,OAAb,CAAqB,UAAAsB,MAAM;AAAA,eAAIX,QAAQ,CAACT,WAAT,CAAqBoB,MAArB,CAAJ;AAAA,OAA3B;AACA,aAAOX,QAAP;AACD;;;WAED,6BAA6BL,UAA7B,EAAyCC,KAAzC,EAA+D;AAAA;;AAC7D,UAAMgB,eAAe,GAAG,KAAKzC,UAAL,CAAgBU,GAAhB,CAAoBC,aAApB,CAAkC,KAAlC,CAAxB;AACA8B,MAAAA,eAAe,CAAC7B,SAAhB,CAA0BC,GAA1B,CAA8B,KAAKb,UAAL,CAAgBc,OAAhB,CAAwBK,KAAtD;AACAsB,MAAAA,eAAe,CAAC7B,SAAhB,CAA0B8B,MAA1B,CAAiC,KAAK1C,UAAL,CAAgBc,OAAhB,iBAAiCU,UAAjC,EAAjC,EAAiF,KAAKxB,UAAL,CAAgBqB,UAAjG;AACAoB,MAAAA,eAAe,CAACE,SAAhB,GAA4BjD,UAAU,CAAC8B,UAAD,CAAV,IAA0BoB,QAAQ,CAACpB,UAAD,CAA9D;AAEA,UAAMqB,iBAAiB,GAAG,KAAK7C,UAAL,CAAgBU,GAAhB,CAAoBC,aAApB,CAAkC,KAAlC,CAA1B;AACAkC,MAAAA,iBAAiB,CAACjC,SAAlB,CAA4BC,GAA5B,CAAgC,KAAKb,UAAL,CAAgBc,OAAhB,CAAwBK,KAAxD;AACA0B,MAAAA,iBAAiB,CAACjC,SAAlB,CAA4B8B,MAA5B,CAAmC,KAAK1C,UAAL,CAAgBc,OAAhB,iBAAiCU,UAAjC,EAAnC,EAAmF,KAAKxB,UAAL,CAAgBqB,UAAnG;AACA,UAAMyB,gBAAgB,GAAGD,iBAAiB,CAACzB,WAAlB,CAA8B,KAAKpB,UAAL,CAAgBU,GAAhB,CAAoBC,aAApB,CAAkC,OAAlC,CAA9B,CAAzB;AACA,UAAMoC,MAAM,GAAG,KAAKzC,OAAL,CAAamB,KAAb,KAAuB,EAAtC;AACAsB,MAAAA,MAAM,CACHC,GADH,CACO;AAAA;AAAA,YAAEC,IAAF;AAAA,YAAQC,GAAR;;AAAA,eAAiB,MAAI,CAACC,WAAL,CAAiBL,gBAAjB,EAAmCrB,KAAnC,EAA0CwB,IAA1C,EAAgDC,GAAhD,CAAjB;AAAA,OADP,EAEGhC,OAFH,CAEW,UAAAkC,YAAY;AAAA,eAAIN,gBAAgB,CAAC1B,WAAjB,CAA6BgC,YAA7B,CAAJ;AAAA,OAFvB;AAIA,UAAMC,uBAAuB,GAAG,KAAKrD,UAAL,CAAgBU,GAAhB,CAAoBC,aAApB,CAAkC,KAAlC,CAAhC;AACA0C,MAAAA,uBAAuB,CAACzC,SAAxB,CAAkCC,GAAlC,CAAsC,KAAKb,UAAL,CAAgBc,OAAhB,CAAwBK,KAA9D;AACAkC,MAAAA,uBAAuB,CAACzC,SAAxB,CAAkC8B,MAAlC,CAAyC,KAAK1C,UAAL,CAAgBc,OAAhB,iBAAiCU,UAAjC,EAAzC,EAAyF,KAAKxB,UAAL,CAAgBqB,UAAzG;AACAgC,MAAAA,uBAAuB,CAACV,SAAxB,GAAoC/C,WAAW,CAAC4B,UAAD,CAAX,IAA2B,qBAA/D;AAEA,aAAO,CAACiB,eAAD,EAAkBI,iBAAlB,EAAqCQ,uBAArC,CAAP;AACD;;;WAED,qBAAqBP,gBAArB,EAAuCrB,KAAvC,EAA8CwB,IAA9C,EAAoDC,GAApD,EAAsE;AAAA;;AACpE,UAAMI,SAAS,GAAGvB,OAAO,CAACwB,QAAR,CAAiB,KAAKvD,UAAL,CAAgBU,GAAjC,EAAsCnB,GAAG,CAAC0D,IAAD,CAAzC,EAAiD,iBAAIC,GAAJ,CAAjD,EAA2D,KAAKlD,UAAL,CAAgBqB,UAAhB,GACzE;AACEmC,QAAAA,cAAc,EAAE;AAAA,iBAAM,MAAI,CAACC,WAAL,CAAiBhC,KAAjB,EAAwBwB,IAAxB,EAA8BC,GAA9B,EACnBf,IADmB,CACd;AAAA,mBAAMW,gBAAgB,CAACY,WAAjB,CAA6BJ,SAA7B,CAAN;AAAA,WADc,WAEb,UAAAlB,KAAK;AAAA,mBAAI,MAAI,CAACpC,UAAL,CAAgBqC,YAAhB,CAA6BD,KAA7B,CAAJ;AAAA,WAFQ,CAAN;AAAA;AADlB,OADyE,GAMzE,EANc,CAAlB;AAOA,aAAOkB,SAAP;AACD;;;;uGAED,iBAA2B7B,KAA3B,EAAkCwB,IAAlC,EAAwCC,GAAxC;AAAA;AAAA;AAAA;AAAA;AAAA;AACQH,gBAAAA,MADR,GACiB,KAAKzC,OAAL,CAAamB,KAAb,KAAuB,EADxC;AAEQkC,gBAAAA,aAFR,GAEwBZ,MAAM,CAACa,IAAP,CAAY;AAAA;AAAA,sBAAEC,SAAF;AAAA,sBAAaC,QAAb;;AAAA,yBAA2BD,SAAS,KAAKZ,IAAd,IAAsBa,QAAQ,KAAKZ,GAA9D;AAAA,iBAAZ,CAFxB;;AAGE,oBAAIS,aAAJ,EAAmB;AACjBZ,kBAAAA,MAAM,CAACgB,MAAP,CAAchB,MAAM,CAACiB,OAAP,CAAeL,aAAf,CAAd,EAA6C,CAA7C;AACD;;AALH;AAAA,uBAMQ,KAAK3D,UAAL,CAAgBiE,IAAhB,EANR;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;;;;;;;;;;;qGASA,kBAAwBC,GAAxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBACQ,KAAKC,gBAAL,CAAsBD,GAAtB,EAA2BxC,QAAQ,CAAC,CAAD,CAAnC,CADR;;AAAA;AAAA;AAAA,uBAEQ,KAAK1B,UAAL,CAAgBiE,IAAhB,EAFR;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;;;;;;;;;;;6GAKA,kBAAiChC,IAAjC,EAAiDR,KAAjD;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAEU2C,OAAO,CAACC,GAAR,CAAYpC,IAAI,CAACe,GAAL,CAAS,UAAAkB,GAAG;AAAA,yBAAI,MAAI,CAACC,gBAAL,CAAsBD,GAAtB,EAA2BzC,KAA3B,CAAJ;AAAA,iBAAZ,CAAZ,CAFV;;AAAA;AAAA;AAAA,uBAGU,KAAKzB,UAAL,CAAgBiE,IAAhB,EAHV;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA,kDAKWG,OAAO,CAACE,MAAR,cALX;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;;;;;;;;;;;4GASA,kBAAgCJ,GAAhC,EAA6CzC,KAA7C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAA4D8C,gBAAAA,aAA5D,8DAAqF,KAArF;AACQC,gBAAAA,KADR,GACgBC,SAAS,CAACP,GAAD,EAAM,KAAKjE,KAAX,CADzB,EAC2C;;AACnCyE,gBAAAA,KAFR,GAEgB,iBAAIR,GAAJ,CAFhB;;AAAA,sBAGM,CAACM,KAAD,IAAU,CAACD,aAHjB;AAAA;AAAA;AAAA;;AAIII,gBAAAA,KAAK,CAACC,GAAN,oDAAsDF,KAAtD;AAJJ;AAAA;AAAA,uCAMY,KAAKtE,MANjB,yEAMY,aAAayE,OANzB,yDAMY,qBAAsBC,IAAtB,CAA2BJ,KAAK,CAAC5E,GAAN,EAA3B,CANZ;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAQYiF,gBAAAA,OARZ;AASMJ,gBAAAA,KAAK,CAACvC,KAAN,CAAY2C,OAAZ;AATN,kDAUaX,OAAO,CAACE,MAAR,CAAe,IAAIU,KAAJ,CAAUD,OAAV,CAAf,CAVb;;AAAA;AAAA,kDAYW,KAAKZ,gBAAL,CAAsBD,GAAtB,EAA2BzC,KAA3B,EAAkC,IAAlC,CAZX;;AAAA;AAAA,oBAac+C,KAbd;AAAA;AAAA;AAAA;;AAcUpC,gBAAAA,KAdV,6DAcqE8B,GAdrE;AAeIS,gBAAAA,KAAK,CAACvC,KAAN,CAAYA,KAAZ;AAfJ,kDAgBWgC,OAAO,CAACE,MAAR,CAAe,IAAIU,KAAJ,CAAU5C,KAAV,CAAf,CAhBX;;AAAA;AAkBE,qBAAK6C,WAAL,CAAiBxD,KAAjB,EAAwByC,GAAxB,EAA6BM,KAA7B,EAAoC,KAAKxE,UAAL,CAAgBkF,OAApD;;AAlBF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;;;;;;;;;;WAqBA,qBAAqBzD,KAArB,EAAoCyC,GAApC,EAAiDiB,GAAjD,EAA0ED,OAA1E,EAAoG;AAClG,UAAI,EAAEzD,KAAK,IAAI,KAAKnB,OAAhB,CAAJ,EAA8B;AAC5B,aAAKA,OAAL,CAAamB,KAAb,IAAsB,EAAtB;AACD;;AACD,WAAK2D,qBAAL,CAA2BlB,GAA3B,EAJkG,CAIlE;;AAChC,WAAK5D,OAAL,CAAamB,KAAb,EAAoBE,IAApB,CAAyB,CAACwD,GAAG,CAAClC,IAAL,EAAWkC,GAAG,CAACjC,GAAJ,CAAQgB,GAAnB,CAAzB;AACAS,MAAAA,KAAK,CAACC,GAAN,kCAAoCM,OAApC,iBAAkDC,GAAG,CAAClC,IAAtD,eAA+DkC,GAAG,CAACjC,GAAnE;AACD;;;WAED,+BAA+BgB,GAA/B,EAAkD;AAChD,WAAK,IAAImB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,EAApB,EAAwBA,CAAC,EAAzB,EAA6B;AAC3B,YAAMtC,MAAM,GAAG,KAAKzC,OAAL,CAAaoB,QAAQ,CAAC2D,CAAD,CAArB,CAAf;;AACA,YAAItC,MAAJ,EAAY;AACV,eAAK,IAAIuC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGvC,MAAM,CAACwC,MAA3B,EAAmCD,CAAC,EAApC,EAAwC;AACtC,mBAAOA,CAAC,GAAGvC,MAAM,CAACwC,MAAX,IAAqBxC,MAAM,CAACuC,CAAD,CAAN,CAAU,CAAV,MAAiBpB,GAA7C,EAAkD;AAChDnB,cAAAA,MAAM,CAACgB,MAAP,CAAcuB,CAAd,EAAiB,CAAjB;AACD;AACF;AACF;AACF;AACF;;;;;;;AAGH,SAAS5D,QAAT,CAAmB2D,CAAnB,EAAsC;AACpC,MAAMG,CAAC,GAAG,CAAC,MAAD,EAAS,QAAT,EAAmB,OAAnB,EAA4B,SAA5B,CAAV;AACA,MAAM/D,KAAe,GAAG,EAAxB;;AACA,OAAK,IAAI6D,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,CAApB,EAAuBA,CAAC,EAAxB,EAA4B;AAC1B,QAAID,CAAC,GAAI,KAAKC,CAAd,EAAkB;AAChB7D,MAAAA,KAAK,CAACE,IAAN,CAAW,mCAAmC6D,CAAC,CAACF,CAAD,CAA/C;AACD;AACF;;AACD7D,EAAAA,KAAK,CAACgE,IAAN;AACA,SAAOhE,KAAK,CAACiE,IAAN,CAAW,IAAX,CAAP;AACD;;AAED,SAAS9C,QAAT,CAAmByC,CAAnB,EAAsC;AACpC,MAAIM,IAAI,GAAG,EAAX;AACA,MAAMH,CAAC,GAAG,CAAC,MAAD,EAAS,QAAT,EAAmB,OAAnB,EAA4B,SAA5B,CAAV;;AACA,OAAK,IAAIF,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,CAApB,EAAuBA,CAAC,EAAxB,EAA4B;AAC1B,QAAID,CAAC,GAAI,KAAKC,CAAd,EAAkB;AAChBK,MAAAA,IAAI,IAAIH,CAAC,CAACF,CAAD,CAAT;AACD;AACF;;AACD,SAAOK,IAAP;AACD;;AAED,SAASlB,SAAT,CAAoBP,GAApB,EAAyB0B,EAAzB,EAAwD;AACtD,MAAM1C,GAAG,GAAG,iBAAIgB,GAAJ,CAAZ;AACA,MAAM2B,KAAK,GAAGD,EAAE,CAACE,YAAH,CAAgB5C,GAAhB,CAAd;;AACA,OAAK,IAAM6C,EAAX,IAAiBF,KAAjB,EAAwB;AACtBlB,IAAAA,KAAK,CAACC,GAAN,CAAU,oCAAoCmB,EAA9C;AACD,GALqD,CAMtD;;;AACA,MAAI7B,GAAG,CAAC8B,UAAJ,CAAe,MAAf,KAA0B9B,GAAG,CAAC+B,KAAJ,CAAU,GAAV,EAAeV,MAAf,KAA0B,CAAxD,EAA2D;AACzD;AACA,WAAO;AAAEtC,MAAAA,IAAI,EAAE,QAAR;AAAkBC,MAAAA,GAAG,EAAEA;AAAvB,KAAP,CAFyD,CAErB;AACrC,GAVqD,CAWtD;;;AACA,MACEgB,GAAG,CAAC8B,UAAJ,CAAe,MAAf,KACA9B,GAAG,CAAC+B,KAAJ,CAAU,GAAV,EAAeV,MAAf,KAA0B,CAD1B,IAEArB,GAAG,CAACgC,QAAJ,CAAa,GAAb,CAHF,EAIE;AACA;AACAvB,IAAAA,KAAK,CAACC,GAAN,CAAU,4DAAV;AACA,WAAO;AAAE3B,MAAAA,IAAI,EAAE,QAAR;AAAkBC,MAAAA,GAAG,EAAE,iBAAIgB,GAAG,CAACiC,KAAJ,CAAU,CAAV,EAAa,CAAC,CAAd,CAAJ;AAAvB,KAAP,CAHA,CAGsD;AACvD;;AAED,MAAI3G,EAAE,CAAC4G,KAAH,CAAS,OAAT,EAAkBlC,GAAlB,IAAyB2B,KAA7B,EAAoC,OAAO;AAAE5C,IAAAA,IAAI,EAAE,OAAR;AAAiBC,IAAAA,GAAG,EAAEA;AAAtB,GAAP;;AAEpC,MAAI1D,EAAE,CAAC4G,KAAH,CAAS,OAAT,EAAkBlC,GAAlB,IAAyB2B,KAA7B,EAAoC;AAClC,WAAO;AAAE5C,MAAAA,IAAI,EAAE,YAAR;AAAsBC,MAAAA,GAAG,EAAEA;AAA3B,KAAP,CADkC,CACM;AACzC;;AACD,MACEA,GAAG,CAACmD,QAAJ,CAAa7G,EAAE,CAAC8G,IAAH,CAAQ,OAAR,CAAb,KACApD,GAAG,CAACmD,QAAJ,CAAa7G,EAAE,CAACC,GAAH,CAAO,oBAAP,CAAb,CADA,IAC8C;AAC9CyD,EAAAA,GAAG,CAACmD,QAAJ,CAAa7G,EAAE,CAAC+G,GAAH,CAAO,UAAP,CAAb,CAFA,IAGArD,GAAG,CAACmD,QAAJ,CAAa7G,EAAE,CAACgH,GAAH,CAAO,OAAP,CAAb,CAJF,EAKE;AACA,WAAO;AAAEvD,MAAAA,IAAI,EAAE,YAAR;AAAsBC,MAAAA,GAAG,EAAEA;AAA3B,KAAP;AACD;;AACD,MACE1D,EAAE,CAAC4G,KAAH,CAAS,YAAT,EAAuBlC,GAAvB,IAA8B2B,KAA9B,IACArG,EAAE,CAAC8G,IAAH,CAAQ,QAAR,EAAkBpC,GAAlB,IAAyB2B,KADzB,IAEArG,EAAE,CAAC8G,IAAH,CAAQ,OAAR,EAAiBpC,GAAjB,IAAwB2B,KAH1B,EAIE;AACA,QAAMY,IAAI,GAAGb,EAAE,CAACc,GAAH,CAAOxD,GAAP,EAAY1D,EAAE,CAAC8G,IAAH,CAAQ,cAAR,CAAZ,CAAb;AACA,QAAIG,IAAJ,EAAU,OAAO;AAAExD,MAAAA,IAAI,EAAE,OAAR;AAAiBC,MAAAA,GAAG,EAAE,iBAAIuD,IAAJ;AAAtB,KAAP;AACV,WAAO;AAAExD,MAAAA,IAAI,EAAE,OAAR;AAAiBC,MAAAA,GAAG,EAAEA;AAAtB,KAAP;AACD;;AACD,MAAI1D,EAAE,CAACmH,KAAH,CAAS,aAAT,EAAwBzC,GAAxB,IAA+B2B,KAAnC,EAA0C;AACxC,WAAO;AAAE5C,MAAAA,IAAI,EAAE,QAAR;AAAkBC,MAAAA,GAAG,EAAEA;AAAvB,KAAP;AACD;;AACD,MAAI1D,EAAE,CAACmH,KAAH,CAAS,kBAAT,EAA6BzC,GAA7B,IAAoC2B,KAAxC,EAA+C;AAC7C,WAAO;AAAE5C,MAAAA,IAAI,EAAE,aAAR;AAAuBC,MAAAA,GAAG,EAAEA;AAA5B,KAAP;AACD;;AACDyB,EAAAA,KAAK,CAACC,GAAN,CAAU,0BAA0BV,GAApC;AACA,SAAO,IAAP;AACD","sourcesContent":["/**\n * Contains the [[AccessGroups]]\n * and [[AccessGroupsOptions]] classes\n * @packageDocumentation\n */\n\nimport { fetcher, IndexedFormula, NamedNode, sym, LiveStore } from 'rdflib'\nimport { ACLbyCombination, readACL } from './acl'\nimport * as widgets from '../widgets'\nimport * as ns from '../ns'\nimport { AccessController } from './access-controller'\nimport { AgentMapMap, ComboList, PartialAgentTriple } from './types'\nimport { AddAgentButtons } from './add-agent-buttons'\nimport * as debug from '../debug'\n\nconst ACL = ns.acl\n\nconst COLLOQUIAL = {\n 13: 'Owners',\n 9: 'Owners (write locked)',\n 5: 'Editors',\n 3: 'Posters',\n 2: 'Submitters',\n 1: 'Viewers'\n}\n\nconst RECOMMENDED = {\n 13: true,\n 5: true,\n 3: true,\n 2: true,\n 1: true\n}\n\nconst EXPLANATION = {\n 13: 'can read, write, and control sharing.',\n 9: 'can read and control sharing, currently write-locked.',\n 5: 'can read and change information',\n 3: 'can add new information, and read but not change existing information',\n 2: 'can add new information but not read any',\n 1: 'can read but not change information'\n}\n\n/**\n * Type for the options parameter of [[AccessGroups]]\n */\nexport interface AccessGroupsOptions {\n defaults?: boolean\n}\n\n/**\n * Renders the table of Owners, Editors, Posters, Submitters, Viewers\n * for https://github.com/solid/userguide/blob/main/views/sharing/userguide.md\n */\nexport class AccessGroups {\n private readonly defaults: boolean\n public byCombo: ComboList\n public aclMap: AgentMapMap\n private readonly addAgentButton: AddAgentButtons\n private readonly rootElement: HTMLElement\n private _store: LiveStore\n\n constructor (\n private doc: NamedNode,\n private aclDoc: NamedNode,\n public controller: AccessController,\n store: IndexedFormula,\n private options: AccessGroupsOptions = {}\n ) {\n this.defaults = options.defaults || false\n fetcher(store, {})\n\n // The store will already have an updater at this point:\n // store.updater = new UpdateManager(store)\n\n this._store = store as LiveStore // TODO hacky, find a better solution\n this.aclMap = readACL(doc, aclDoc, store, this.defaults)\n this.byCombo = ACLbyCombination(this.aclMap)\n this.addAgentButton = new AddAgentButtons(this)\n this.rootElement = this.controller.dom.createElement('div')\n this.rootElement.classList.add(this.controller.classes.accessGroupList)\n }\n\n public get store () {\n return this._store\n }\n\n public set store (store) {\n this._store = store\n this.aclMap = readACL(this.doc, this.aclDoc, store, this.defaults)\n this.byCombo = ACLbyCombination(this.aclMap)\n }\n\n public render (): HTMLElement {\n this.rootElement.innerHTML = ''\n this.renderGroups().forEach(group => this.rootElement.appendChild(group))\n if (this.controller.isEditable) {\n this.rootElement.appendChild(this.addAgentButton.render())\n }\n return this.rootElement\n }\n\n private renderGroups (): HTMLElement[] {\n const groupElements: HTMLElement[] = []\n for (let comboIndex = 15; comboIndex > 0; comboIndex--) {\n const combo = kToCombo(comboIndex)\n if ((this.controller.isEditable && RECOMMENDED[comboIndex]) || this.byCombo[combo]) {\n groupElements.push(this.renderGroup(comboIndex, combo))\n }\n }\n return groupElements\n }\n\n private renderGroup (comboIndex: number, combo: string): HTMLElement {\n const groupRow = this.controller.dom.createElement('div')\n groupRow.classList.add(this.controller.classes.accessGroupListItem)\n widgets.makeDropTarget(groupRow, (uris) => this.handleDroppedUris(uris, combo)\n .then(() => this.controller.render())\n .catch(error => this.controller.renderStatus(error)))\n const groupColumns = this.renderGroupElements(comboIndex, combo)\n groupColumns.forEach(column => groupRow.appendChild(column))\n return groupRow\n }\n\n private renderGroupElements (comboIndex, combo): HTMLElement[] {\n const groupNameColumn = this.controller.dom.createElement('div')\n groupNameColumn.classList.add(this.controller.classes.group)\n groupNameColumn.classList.toggle(this.controller.classes[`group-${comboIndex}`], this.controller.isEditable)\n groupNameColumn.innerText = COLLOQUIAL[comboIndex] || ktToList(comboIndex)\n\n const groupAgentsColumn = this.controller.dom.createElement('div')\n groupAgentsColumn.classList.add(this.controller.classes.group)\n groupAgentsColumn.classList.toggle(this.controller.classes[`group-${comboIndex}`], this.controller.isEditable)\n const groupAgentsTable = groupAgentsColumn.appendChild(this.controller.dom.createElement('table'))\n const combos = this.byCombo[combo] || []\n combos\n .map(([pred, obj]) => this.renderAgent(groupAgentsTable, combo, pred, obj))\n .forEach(agentElement => groupAgentsTable.appendChild(agentElement))\n\n const groupDescriptionElement = this.controller.dom.createElement('div')\n groupDescriptionElement.classList.add(this.controller.classes.group)\n groupDescriptionElement.classList.toggle(this.controller.classes[`group-${comboIndex}`], this.controller.isEditable)\n groupDescriptionElement.innerText = EXPLANATION[comboIndex] || 'Unusual combination'\n\n return [groupNameColumn, groupAgentsColumn, groupDescriptionElement]\n }\n\n private renderAgent (groupAgentsTable, combo, pred, obj): HTMLElement {\n const personRow = widgets.personTR(this.controller.dom, ACL(pred), sym(obj), this.controller.isEditable\n ? {\n deleteFunction: () => this.deleteAgent(combo, pred, obj)\n .then(() => groupAgentsTable.removeChild(personRow))\n .catch(error => this.controller.renderStatus(error))\n }\n : {})\n return personRow\n }\n\n private async deleteAgent (combo, pred, obj): Promise<void> {\n const combos = this.byCombo[combo] || []\n const comboToRemove = combos.find(([comboPred, comboObj]) => comboPred === pred && comboObj === obj)\n if (comboToRemove) {\n combos.splice(combos.indexOf(comboToRemove), 1)\n }\n await this.controller.save()\n }\n\n public async addNewURI (uri: string): Promise<void> {\n await this.handleDroppedUri(uri, kToCombo(1))\n await this.controller.save()\n }\n\n private async handleDroppedUris (uris: string[], combo: string): Promise<void> {\n try {\n await Promise.all(uris.map(uri => this.handleDroppedUri(uri, combo)))\n await this.controller.save()\n } catch (error) {\n return Promise.reject(error)\n }\n }\n\n private async handleDroppedUri (uri: string, combo: string, secondAttempt: boolean = false): Promise<void> {\n const agent = findAgent(uri, this.store) // eg 'agent', 'origin', agentClass'\n const thing = sym(uri)\n if (!agent && !secondAttempt) {\n debug.log(` Not obvious: looking up dropped thing ${thing}`)\n try {\n await this._store?.fetcher?.load(thing.doc())\n } catch (error) {\n const message = `Ignore error looking up dropped thing: ${error}`\n debug.error(message)\n return Promise.reject(new Error(message))\n }\n return this.handleDroppedUri(uri, combo, true)\n } else if (!agent) {\n const error = ` Error: Drop fails to drop appropriate thing! ${uri}`\n debug.error(error)\n return Promise.reject(new Error(error))\n }\n this.setACLCombo(combo, uri, agent, this.controller.subject)\n }\n\n private setACLCombo (combo: string, uri: string, res: PartialAgentTriple, subject: NamedNode): void {\n if (!(combo in this.byCombo)) {\n this.byCombo[combo] = []\n }\n this.removeAgentFromCombos(uri) // Combos are mutually distinct\n this.byCombo[combo].push([res.pred, res.obj.uri])\n debug.log(`ACL: setting access to ${subject} by ${res.pred}: ${res.obj}`)\n }\n\n private removeAgentFromCombos (uri: string): void {\n for (let k = 0; k < 16; k++) {\n const combos = this.byCombo[kToCombo(k)]\n if (combos) {\n for (let i = 0; i < combos.length; i++) {\n while (i < combos.length && combos[i][1] === uri) {\n combos.splice(i, 1)\n }\n }\n }\n }\n }\n}\n\nfunction kToCombo (k: number): string {\n const y = ['Read', 'Append', 'Write', 'Control']\n const combo: string[] = []\n for (let i = 0; i < 4; i++) {\n if (k & (1 << i)) {\n combo.push('http://www.w3.org/ns/auth/acl#' + y[i])\n }\n }\n combo.sort()\n return combo.join('\\n')\n}\n\nfunction ktToList (k: number): string {\n let list = ''\n const y = ['Read', 'Append', 'Write', 'Control']\n for (let i = 0; i < 4; i++) {\n if (k & (1 << i)) {\n list += y[i]\n }\n }\n return list\n}\n\nfunction findAgent (uri, kb): PartialAgentTriple | null {\n const obj = sym(uri)\n const types = kb.findTypeURIs(obj)\n for (const ty in types) {\n debug.log(' drop object type includes: ' + ty)\n }\n // An Origin URI is one like https://fred.github.io eith no trailing slash\n if (uri.startsWith('http') && uri.split('/').length === 3) {\n // there is no third slash\n return { pred: 'origin', obj: obj } // The only way to know an origin alas\n }\n // @@ This is an almighty kludge needed because drag and drop adds extra slashes to origins\n if (\n uri.startsWith('http') &&\n uri.split('/').length === 4 &&\n uri.endsWith('/')\n ) {\n // there IS third slash\n debug.log('Assuming final slash on dragged origin URI was unintended!')\n return { pred: 'origin', obj: sym(uri.slice(0, -1)) } // Fix a URI where the drag and drop system has added a spurious slash\n }\n\n if (ns.vcard('WebID').uri in types) return { pred: 'agent', obj: obj }\n\n if (ns.vcard('Group').uri in types) {\n return { pred: 'agentGroup', obj: obj } // @@ note vcard membership not RDFs\n }\n if (\n obj.sameTerm(ns.foaf('Agent')) ||\n obj.sameTerm(ns.acl('AuthenticatedAgent')) || // AuthenticatedAgent\n obj.sameTerm(ns.rdf('Resource')) ||\n obj.sameTerm(ns.owl('Thing'))\n ) {\n return { pred: 'agentClass', obj: obj }\n }\n if (\n ns.vcard('Individual').uri in types ||\n ns.foaf('Person').uri in types ||\n ns.foaf('Agent').uri in types\n ) {\n const pref = kb.any(obj, ns.foaf('preferredURI'))\n if (pref) return { pred: 'agent', obj: sym(pref) }\n return { pred: 'agent', obj: obj }\n }\n if (ns.solid('AppProvider').uri in types) {\n return { pred: 'origin', obj: obj }\n }\n if (ns.solid('AppProviderClass').uri in types) {\n return { pred: 'originClass', obj: obj }\n }\n debug.log(' Triage fails for ' + uri)\n return null\n}\n"],"file":"access-groups.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/acl/access-groups.ts"],"names":["ACL","ns","acl","COLLOQUIAL","RECOMMENDED","EXPLANATION","AccessGroups","doc","aclDoc","controller","store","options","defaults","_store","aclMap","byCombo","addAgentButton","AddAgentButtons","rootElement","dom","createElement","classList","add","classes","accessGroupList","innerHTML","renderGroups","forEach","group","appendChild","isEditable","render","groupElements","comboIndex","combo","kToCombo","push","renderGroup","groupRow","accessGroupListItem","widgets","makeDropTarget","uris","handleDroppedUris","then","error","renderStatus","groupColumns","renderGroupElements","column","groupNameColumn","toggle","innerText","ktToList","groupAgentsColumn","groupAgentsTable","combos","map","pred","obj","renderAgent","agentElement","groupDescriptionElement","personRow","personTR","deleteFunction","deleteAgent","removeChild","comboToRemove","find","comboPred","comboObj","splice","indexOf","save","uri","handleDroppedUri","Promise","all","reject","secondAttempt","agent","findAgent","thing","debug","log","fetcher","load","message","Error","setACLCombo","subject","res","removeAgentFromCombos","k","i","length","y","sort","join","list","kb","types","findTypeURIs","ty","startsWith","split","endsWith","slice","vcard","sameTerm","foaf","rdf","owl","pref","any","solid"],"mappings":"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","sourcesContent":["/**\n * Contains the [[AccessGroups]]\n * and [[AccessGroupsOptions]] classes\n * @packageDocumentation\n */\n\nimport { NamedNode, sym, LiveStore } from 'rdflib'\nimport { ACLbyCombination, readACL } from './acl'\nimport * as widgets from '../widgets'\nimport * as ns from '../ns'\nimport { AccessController } from './access-controller'\nimport { AgentMapMap, ComboList, PartialAgentTriple } from './types'\nimport { AddAgentButtons } from './add-agent-buttons'\nimport * as debug from '../debug'\n\nconst ACL = ns.acl\n\nconst COLLOQUIAL = {\n 13: 'Owners',\n 9: 'Owners (write locked)',\n 5: 'Editors',\n 3: 'Posters',\n 2: 'Submitters',\n 1: 'Viewers'\n}\n\nconst RECOMMENDED = {\n 13: true,\n 5: true,\n 3: true,\n 2: true,\n 1: true\n}\n\nconst EXPLANATION = {\n 13: 'can read, write, and control sharing.',\n 9: 'can read and control sharing, currently write-locked.',\n 5: 'can read and change information',\n 3: 'can add new information, and read but not change existing information',\n 2: 'can add new information but not read any',\n 1: 'can read but not change information'\n}\n\n/**\n * Type for the options parameter of [[AccessGroups]]\n */\nexport interface AccessGroupsOptions {\n defaults?: boolean\n}\n\n/**\n * Renders the table of Owners, Editors, Posters, Submitters, Viewers\n * for https://github.com/solid/userguide/blob/main/views/sharing/userguide.md\n */\nexport class AccessGroups {\n private readonly defaults: boolean\n public byCombo: ComboList\n public aclMap: AgentMapMap\n private readonly addAgentButton: AddAgentButtons\n private readonly rootElement: HTMLElement\n private _store: LiveStore\n\n constructor (\n private doc: NamedNode,\n private aclDoc: NamedNode,\n public controller: AccessController,\n store: LiveStore,\n private options: AccessGroupsOptions = {}\n ) {\n this.defaults = options.defaults || false\n this._store = store\n this.aclMap = readACL(doc, aclDoc, store, this.defaults)\n this.byCombo = ACLbyCombination(this.aclMap)\n this.addAgentButton = new AddAgentButtons(this)\n this.rootElement = this.controller.dom.createElement('div')\n this.rootElement.classList.add(this.controller.classes.accessGroupList)\n }\n\n public get store () {\n return this._store\n }\n\n public set store (store) {\n this._store = store\n this.aclMap = readACL(this.doc, this.aclDoc, store, this.defaults)\n this.byCombo = ACLbyCombination(this.aclMap)\n }\n\n public render (): HTMLElement {\n this.rootElement.innerHTML = ''\n this.renderGroups().forEach(group => this.rootElement.appendChild(group))\n if (this.controller.isEditable) {\n this.rootElement.appendChild(this.addAgentButton.render())\n }\n return this.rootElement\n }\n\n private renderGroups (): HTMLElement[] {\n const groupElements: HTMLElement[] = []\n for (let comboIndex = 15; comboIndex > 0; comboIndex--) {\n const combo = kToCombo(comboIndex)\n if ((this.controller.isEditable && RECOMMENDED[comboIndex]) || this.byCombo[combo]) {\n groupElements.push(this.renderGroup(comboIndex, combo))\n }\n }\n return groupElements\n }\n\n private renderGroup (comboIndex: number, combo: string): HTMLElement {\n const groupRow = this.controller.dom.createElement('div')\n groupRow.classList.add(this.controller.classes.accessGroupListItem)\n widgets.makeDropTarget(groupRow, (uris) => this.handleDroppedUris(uris, combo)\n .then(() => this.controller.render())\n .catch(error => this.controller.renderStatus(error)))\n const groupColumns = this.renderGroupElements(comboIndex, combo)\n groupColumns.forEach(column => groupRow.appendChild(column))\n return groupRow\n }\n\n private renderGroupElements (comboIndex, combo): HTMLElement[] {\n const groupNameColumn = this.controller.dom.createElement('div')\n groupNameColumn.classList.add(this.controller.classes.group)\n groupNameColumn.classList.toggle(this.controller.classes[`group-${comboIndex}`], this.controller.isEditable)\n groupNameColumn.innerText = COLLOQUIAL[comboIndex] || ktToList(comboIndex)\n\n const groupAgentsColumn = this.controller.dom.createElement('div')\n groupAgentsColumn.classList.add(this.controller.classes.group)\n groupAgentsColumn.classList.toggle(this.controller.classes[`group-${comboIndex}`], this.controller.isEditable)\n const groupAgentsTable = groupAgentsColumn.appendChild(this.controller.dom.createElement('table'))\n const combos = this.byCombo[combo] || []\n combos\n .map(([pred, obj]) => this.renderAgent(groupAgentsTable, combo, pred, obj))\n .forEach(agentElement => groupAgentsTable.appendChild(agentElement))\n\n const groupDescriptionElement = this.controller.dom.createElement('div')\n groupDescriptionElement.classList.add(this.controller.classes.group)\n groupDescriptionElement.classList.toggle(this.controller.classes[`group-${comboIndex}`], this.controller.isEditable)\n groupDescriptionElement.innerText = EXPLANATION[comboIndex] || 'Unusual combination'\n\n return [groupNameColumn, groupAgentsColumn, groupDescriptionElement]\n }\n\n private renderAgent (groupAgentsTable, combo, pred, obj): HTMLElement {\n const personRow = widgets.personTR(this.controller.dom, ACL(pred), sym(obj), this.controller.isEditable\n ? {\n deleteFunction: () => this.deleteAgent(combo, pred, obj)\n .then(() => groupAgentsTable.removeChild(personRow))\n .catch(error => this.controller.renderStatus(error))\n }\n : {})\n return personRow\n }\n\n private async deleteAgent (combo, pred, obj): Promise<void> {\n const combos = this.byCombo[combo] || []\n const comboToRemove = combos.find(([comboPred, comboObj]) => comboPred === pred && comboObj === obj)\n if (comboToRemove) {\n combos.splice(combos.indexOf(comboToRemove), 1)\n }\n await this.controller.save()\n }\n\n public async addNewURI (uri: string): Promise<void> {\n await this.handleDroppedUri(uri, kToCombo(1))\n await this.controller.save()\n }\n\n private async handleDroppedUris (uris: string[], combo: string): Promise<void> {\n try {\n await Promise.all(uris.map(uri => this.handleDroppedUri(uri, combo)))\n await this.controller.save()\n } catch (error) {\n return Promise.reject(error)\n }\n }\n\n private async handleDroppedUri (uri: string, combo: string, secondAttempt: boolean = false): Promise<void> {\n const agent = findAgent(uri, this.store) // eg 'agent', 'origin', agentClass'\n const thing = sym(uri)\n if (!agent && !secondAttempt) {\n debug.log(` Not obvious: looking up dropped thing ${thing}`)\n try {\n await this._store?.fetcher?.load(thing.doc())\n } catch (error) {\n const message = `Ignore error looking up dropped thing: ${error}`\n debug.error(message)\n return Promise.reject(new Error(message))\n }\n return this.handleDroppedUri(uri, combo, true)\n } else if (!agent) {\n const error = ` Error: Drop fails to drop appropriate thing! ${uri}`\n debug.error(error)\n return Promise.reject(new Error(error))\n }\n this.setACLCombo(combo, uri, agent, this.controller.subject)\n }\n\n private setACLCombo (combo: string, uri: string, res: PartialAgentTriple, subject: NamedNode): void {\n if (!(combo in this.byCombo)) {\n this.byCombo[combo] = []\n }\n this.removeAgentFromCombos(uri) // Combos are mutually distinct\n this.byCombo[combo].push([res.pred, res.obj.uri])\n debug.log(`ACL: setting access to ${subject} by ${res.pred}: ${res.obj}`)\n }\n\n private removeAgentFromCombos (uri: string): void {\n for (let k = 0; k < 16; k++) {\n const combos = this.byCombo[kToCombo(k)]\n if (combos) {\n for (let i = 0; i < combos.length; i++) {\n while (i < combos.length && combos[i][1] === uri) {\n combos.splice(i, 1)\n }\n }\n }\n }\n }\n}\n\nfunction kToCombo (k: number): string {\n const y = ['Read', 'Append', 'Write', 'Control']\n const combo: string[] = []\n for (let i = 0; i < 4; i++) {\n if (k & (1 << i)) {\n combo.push('http://www.w3.org/ns/auth/acl#' + y[i])\n }\n }\n combo.sort()\n return combo.join('\\n')\n}\n\nfunction ktToList (k: number): string {\n let list = ''\n const y = ['Read', 'Append', 'Write', 'Control']\n for (let i = 0; i < 4; i++) {\n if (k & (1 << i)) {\n list += y[i]\n }\n }\n return list\n}\n\nfunction findAgent (uri, kb): PartialAgentTriple | null {\n const obj = sym(uri)\n const types = kb.findTypeURIs(obj)\n for (const ty in types) {\n debug.log(' drop object type includes: ' + ty)\n }\n // An Origin URI is one like https://fred.github.io eith no trailing slash\n if (uri.startsWith('http') && uri.split('/').length === 3) {\n // there is no third slash\n return { pred: 'origin', obj: obj } // The only way to know an origin alas\n }\n // @@ This is an almighty kludge needed because drag and drop adds extra slashes to origins\n if (\n uri.startsWith('http') &&\n uri.split('/').length === 4 &&\n uri.endsWith('/')\n ) {\n // there IS third slash\n debug.log('Assuming final slash on dragged origin URI was unintended!')\n return { pred: 'origin', obj: sym(uri.slice(0, -1)) } // Fix a URI where the drag and drop system has added a spurious slash\n }\n\n if (ns.vcard('WebID').uri in types) return { pred: 'agent', obj: obj }\n\n if (ns.vcard('Group').uri in types) {\n return { pred: 'agentGroup', obj: obj } // @@ note vcard membership not RDFs\n }\n if (\n obj.sameTerm(ns.foaf('Agent')) ||\n obj.sameTerm(ns.acl('AuthenticatedAgent')) || // AuthenticatedAgent\n obj.sameTerm(ns.rdf('Resource')) ||\n obj.sameTerm(ns.owl('Thing'))\n ) {\n return { pred: 'agentClass', obj: obj }\n }\n if (\n ns.vcard('Individual').uri in types ||\n ns.foaf('Person').uri in types ||\n ns.foaf('Agent').uri in types\n ) {\n const pref = kb.any(obj, ns.foaf('preferredURI'))\n if (pref) return { pred: 'agent', obj: sym(pref) }\n return { pred: 'agent', obj: obj }\n }\n if (ns.solid('AppProvider').uri in types) {\n return { pred: 'origin', obj: obj }\n }\n if (ns.solid('AppProviderClass').uri in types) {\n return { pred: 'originClass', obj: obj }\n }\n debug.log(' Triage fails for ' + uri)\n return null\n}\n"],"file":"access-groups.js"}
|
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":";;;;;;;;;;;;;;;;;AAMA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;AAhBA;AACA;AACA;AACA;;AAEA;AAQ8B;AAK9B,IAAMA,EAAE,GAAG;AAAEC,EAAAA,KAAK,EAALA,YAAF;AAASC,EAAAA,KAAK,EAALA,eAAT;AAAgBC,EAAAA,EAAE,EAAFA,EAAhB;AAAoBC,EAAAA,KAAK,EAALA,aAApB;AAA2BC,EAAAA,GAAG,EAAHA,GAA3B;AAAgCC,EAAAA,GAAG,EAAHA,GAAhC;AAAqCC,EAAAA,KAAK,EAALA,YAArC;AAA4CC,EAAAA,KAAK,EAALA,KAA5C;AAAmDC,EAAAA,KAAK,EAALA,KAAnD;AAA0DC,EAAAA,OAAO,EAAPA;AAA1D,CAAX;AACA,IAAMC,IAAI,GAAGX,EAAE,CAACM,GAAhB;AAEA,IAAMM,IAAI,GAAGD,IAAI,CAACE,SAAL,CAAe,qCAAf,CAAb;AACA,IAAMC,aAAa,GAAG,gBAAtB;AAEA,IAAMC,KAAK,GAAGN,KAAK,CAACM,KAApB;AACA,IAAMC,GAAG,GAAGC,MAAM,CAACC,QAAP,IAAmB,IAA/B;AAEA;AACA;AACA;AACA;AACA;;AACA,SAASC,iBAAT,CAA4BC,GAA5B,EAAiC;AAC/B,SAAO,IAAIC,OAAJ,CAAY,UAAUC,OAAV,EAAmBC,MAAnB,EAA2B;AAC5ChB,iBAAMiB,OAAN,CAAcC,IAAd,CAAmBL,GAAnB,EAAwBM,IAAxB,CACE,UAAAC,QAAQ,EAAI;AACVC,MAAAA,KAAK,CAACC,GAAN,CAAU,4CAA4CT,GAAtD,EADU,CAEV;;AACAE,MAAAA,OAAO,CAACK,QAAD,CAAP;AACD,KALH,EAME,UAAAG,GAAG,EAAI;AACL,UAAIA,GAAG,CAACH,QAAJ,CAAaI,MAAb,KAAwB,GAA5B,EAAiC;AAC/BH,QAAAA,KAAK,CAACC,GAAN,CACE,0DAA0DT,GAD5D;;AAIAb,qBAAMiB,OAAN,CACGQ,YADH,CACgB,KADhB,EACuBZ,GAAG,CAACa,GAD3B,EACgC;AAC5BC,UAAAA,IAAI,EAAE,EADsB;AAE5BC,UAAAA,WAAW,EAAE;AAFe,SADhC,EAKGT,IALH,CAMI,UAAAC,QAAQ,EAAI;AACV;AACA,iBAAOpB,aAAMiB,OAAN,CAAcY,SAAd,CAAwBhB,GAAG,CAACa,GAA5B,CAAP,CAFU,CAE8B;;AACxCL,UAAAA,KAAK,CAACC,GAAN,CAAU,sCAAsCT,GAAhD;AACAE,UAAAA,OAAO,CAACK,QAAD,CAAP;AACD,SAXL,EAYI,UAAAG,GAAG,EAAI;AACLF,UAAAA,KAAK,CAACC,GAAN,CAAU,mCAAmCT,GAAnC,GAAyC,IAAzC,GAAgDU,GAA1D;AACAP,UAAAA,MAAM,CAACO,GAAD,CAAN;AACD,SAfL;AAiBD,OAtBD,MAsBO;AACLF,QAAAA,KAAK,CAACC,GAAN,CACE,gDAAgDT,GAAhD,GAAsD,IAAtD,GAA6DU,GAD/D;AAGAP,QAAAA,MAAM,CAACO,GAAD,CAAN;AACD;AACF,KAnCH;AAqCD,GAtCM,CAAP;AAuCD,C,CAED;;;AACA,SAASO,aAAT,CAAwBC,GAAxB,EAA6BC,GAA7B,EAAkC;AAChC,SAAO,IAAIlB,OAAJ,CAAY,UAAUC,OAAV,EAAmBC,MAAnB,EAA2B;AAC5ChB,iBAAMiC,OAAN,CAAcC,MAAd,CAAqBH,GAArB,EAA0BC,GAA1B,EAA+B,UAAUN,GAAV,EAAeS,EAAf,EAAmBC,SAAnB,EAA8B;AAC3D,UAAI,CAACD,EAAL,EAAS;AACPnB,QAAAA,MAAM,CAAC,IAAIqB,KAAJ,CAAUD,SAAV,CAAD,CAAN;AACD,OAFD,MAEO;AACLrB,QAAAA,OAAO;AACR;AACF,KAND,EAD4C,CAOzC;;AACJ,GARM,CAAP,CADgC,CAS7B;AACJ,C,CAED;;AAEA;AACA;;AACA;AACA;;;SACsBuB,oB;;;AAsCtB;AACA;;;;wGAvCO,iBAAqCC,WAArC;AAAA;AAAA;AAAA;AAAA;AAAA;AACCC,YAAAA,QADD,GACYnC,IAAI,CAAC,UAAD,CADhB;AAECoC,YAAAA,QAFD,GAEY,eAFZ;AAGCC,YAAAA,QAHD,GAGY,IAHZ;AAAA;AAAA,mBAKCjD,EAAE,CAACC,KAAH,CAASiD,gBAAT,CAA0BJ,WAA1B,EAAuCC,QAAvC,EAAiDE,QAAjD,CALD;;AAAA;AAAA,kBAMDH,WAAW,CAACK,SAAZ,IAAyBL,WAAW,CAACK,SAAZ,CAAsBC,MAAtB,GAA+B,CANvD;AAAA;AAAA;AAAA;;AAOHN,YAAAA,WAAW,CAACO,gBAAZ,GAA+BP,WAAW,CAACK,SAAZ,CAAsB,CAAtB,CAA/B;;AACA,gBAAIL,WAAW,CAACK,SAAZ,CAAsBC,MAAtB,GAA+B,CAAnC,EAAsC;AACpCE,cAAAA,KAAK,CAAC,kCAAkCR,WAAW,CAACK,SAA/C,CAAL;AACD;;AAVE;AAAA;;AAAA;AAAA,iBAYCL,WAAW,CAACS,aAZb;AAAA;AAAA;AAAA;;AAaD;AACMC,YAAAA,eAdL,GAcuB7C,IAAI,CAAC8C,GAAL,CACtBX,WAAW,CAACS,aAAZ,CAA0BG,GAA1B,GAAgCzB,GAAhC,GAAsCe,QADhB,CAdvB;AAAA;AAkBCpB,YAAAA,KAAK,CAACC,GAAN,CAAU,gCAAgC2B,eAA1C;AAlBD;AAAA,mBAmBOrC,iBAAiB,CAACqC,eAAD,CAnBxB;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAqBCF,YAAAA,KAAK,CAACK,KAAN,CAAY,+CAAZ;AArBD,6CAsBQb,WAtBR;;AAAA;AAAA;AAAA,mBAwBK9C,EAAE,CAACC,KAAH,CAAS2D,mBAAT,CACJd,WADI,EAEJU,eAFI,EAGJT,QAHI,EAIJ,IAJI,CAxBL;;AAAA;AA6BC;AACFD,YAAAA,WAAW,CAACO,gBAAZ,GAA+BG,eAA/B;AA9BC;AAAA;;AAAA;AAgCDF,YAAAA,KAAK,CAAC,gEAAD,CAAL;;AAhCC;AAAA,6CAmCER,WAnCF;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,G;;;;SAyCQe,W;;;;;+FAAf,kBAA4BC,OAA5B,EAAqCC,MAArC;AAAA;AAAA;AAAA;AAAA;AAAA;AACE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACMC,YAAAA,KAbN,GAac,EAbd;AAcQC,YAAAA,EAdR,GAcajE,EAAE,CAACC,KAAH,CAASiE,WAAT,EAdb,EAcoC;;AAdpC,gBAeOD,EAfP;AAAA;AAAA;AAAA;;AAAA,kBAeiB,IAAIrB,KAAJ,CAAU,mCAAV,CAfjB;;AAAA;AAiBQuB,YAAAA,MAjBR,GAiBiB5D,aAAM6D,GAAN,CAAUL,MAAV,EAAkB5D,EAAE,CAACkE,IAAH,CAAQ,OAAR,CAAlB,CAjBjB;AAkBEL,YAAAA,KAAK,GACHjD,KAAK,CAACoD,MAAD,CAAL,GAAgB,IAAhB,GAAuB5D,aAAM+D,QAAN,CAAeP,MAAf,EAAuB5D,EAAE,CAACoE,IAAH,CAAQ,SAAR,CAAvB,EAA2CC,KAA3C,CAAiD,CAAjD,EAAoD,EAApD,CADzB,CAlBF,CAmBmF;;AAC3EC,YAAAA,WApBR,GAoBsBX,OAAO,CAACT,gBApB9B;AAqBQqB,YAAAA,QArBR,GAqBmB1E,EAAE,CAACU,OAAH,CAAWiE,QAAX,CAAoBF,WAApB,EAAiCT,KAAjC,CArBnB;AAsBQzB,YAAAA,GAtBR,GAsBc,CACV5B,IAAI,CAACiE,EAAL,CAAQH,WAAR,EAAqBzE,EAAE,CAACG,EAAH,CAAM0E,GAAN,CAAU,YAAV,CAArB,EAA8CH,QAA9C,EAAwDD,WAAxD,CADU,EAEV9D,IAAI,CAACiE,EAAL,CAAQF,QAAR,EAAkB1E,EAAE,CAACG,EAAH,CAAMG,GAAN,CAAU,MAAV,CAAlB,EAAqCM,IAAI,CAAC,UAAD,CAAzC,EAAuD6D,WAAvD,CAFU,EAGV9D,IAAI,CAACiE,EAAL,CAAQF,QAAR,EAAkB1E,EAAE,CAACG,EAAH,CAAM0E,GAAN,CAAU,SAAV,CAAlB,EAAwC,IAAIC,IAAJ,EAAxC,EAAoDL,WAApD,CAHU,EAIV9D,IAAI,CAACiE,EAAL,CAAQF,QAAR,EAAkB9D,IAAI,CAAC,SAAD,CAAtB,EAAmCmD,MAAnC,EAA2CU,WAA3C,CAJU,EAKV9D,IAAI,CAACiE,EAAL,CAAQF,QAAR,EAAkB1E,EAAE,CAACG,EAAH,CAAMkE,IAAN,CAAW,OAAX,CAAlB,EAAuCJ,EAAvC,EAA2CQ,WAA3C,CALU,EAMV9D,IAAI,CAACiE,EAAL,CAAQF,QAAR,EAAkB1E,EAAE,CAACG,EAAH,CAAM0E,GAAN,CAAU,OAAV,CAAlB,EAAsCb,KAAtC,EAA6CS,WAA7C,CANU,CAtBd;AAAA;AAAA;AAAA,mBA+BUpC,aAAa,CAAC,EAAD,EAAKE,GAAL,CA/BvB;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAiCUwC,YAAAA,GAjCV,GAiCgB,kCAjChB;AAkCIzB,YAAAA,KAAK,CAACK,KAAN,CAAYoB,GAAZ;AAlCJ,8CAmCW,IAnCX;;AAAA;AAAA,8CAqCSL,QArCT;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,G;;;;SAwCsBM,c;;;;;kGAAf,kBAA+BlC,WAA/B,EAA4CiB,MAA5C,EAAoDkB,cAApD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBACC1E,aAAMiB,OAAN,CAAcC,IAAd,CAAmBqB,WAAW,CAACO,gBAA/B,CADD;;AAAA;AAEC6B,YAAAA,SAFD,GAEa3E,aAAM4E,IAAN,CAChB,IADgB,EAEhBvE,IAAI,CAAC,SAAD,CAFY,EAGhBmD,MAHgB,EAIhBjB,WAAW,CAACO,gBAJI,CAFb;;AAAA,iBAQD6B,SAAS,CAAC9B,MART;AAAA;AAAA;AAAA;;AAAA,gBAUEgC,OAAO,CAAC,6BAA6BF,SAAS,CAAC9B,MAAxC,CAVT;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAWMiC,YAAAA,CAXN,GAWU,CAXV;;AAAA;AAAA,kBAWaA,CAAC,GAAGH,SAAS,CAAC9B,MAX3B;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA,mBAaOf,aAAa,CAAC9B,aAAM+E,mBAAN,CAA0BJ,SAAS,CAACG,CAAD,CAAnC,CAAD,EAA0C,EAA1C,CAbpB;;AAAA;AAcCJ,YAAAA,cAAc,CAACzE,KAAf,CAAqB+E,eAArB,GAAuC,OAAvC;AACA3D,YAAAA,KAAK,CAACC,GAAN,CAAU,uBAAuBqD,SAAS,CAACG,CAAD,CAA1C;AAfD;AAAA;;AAAA;AAAA;AAAA;AAiBCzD,YAAAA,KAAK,CAAC+B,KAAN,CAAY,sCAAZ;AACAL,YAAAA,KAAK,CAAC,sCAAD,CAAL;;AAlBD;AAWmC+B,YAAAA,CAAC,EAXpC;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA,mBAsBoBxB,WAAW,CAACf,WAAD,EAAciB,MAAd,CAtB/B;;AAAA;AAsBGW,YAAAA,QAtBH;AAuBHO,YAAAA,cAAc,CAACzE,KAAf,CAAqB+E,eAArB,GAAuC,QAAvC;AACA3D,YAAAA,KAAK,CAACC,GAAN,CAAU,qBAAqB6C,QAA/B;;AAxBG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,G;;;;SA4Bec,qB;;;;;yGAAf,kBAAsC1C,WAAtC,EAAmDiB,MAAnD;AAAA,QACU0B,sBADV;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sHACL,kBAAuCR,cAAvC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,+BACQ1E,aAAMiB,OAAN,CAAcC,IAAd,CAAmBqB,WAAW,CAACO,gBAA/B,CADR;;AAAA;AAEQqC,wBAAAA,UAFR,GAEqBnF,aAAM6D,GAAN,CACjB,IADiB,EAEjBxD,IAAI,CAAC,SAAD,CAFa,EAGjBqE,cAAc,CAAClB,MAHE,EAIjBjB,WAAW,CAACO,gBAJK,CAFrB;AAQE4B,wBAAAA,cAAc,CAACzE,KAAf,GAAuBR,EAAE,CAACQ,KAAH,CAASmF,WAAhC;AACA,4BAAID,UAAJ,EAAgBT,cAAc,CAACzE,KAAf,CAAqB+E,eAArB,GAAuC,QAAvC;;AATlB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eADK;AAAA;AAAA;;AACUE,YAAAA,sBADV;AAAA;AAAA;;AAAA,iBAcD3C,WAAW,CAACO,gBAdX;AAAA;AAAA;AAAA;;AAeH4B,YAAAA,cAAc,GAAGjF,EAAE,CAACU,OAAH,CAAWkF,MAAX,CACf5E,GADe,EAEfhB,EAAE,CAACE,KAAH,CAAS2F,QAAT,GAAoB/E,aAFL,EAGfC,KAAK,CAACH,IAAI,CAAC,UAAD,CAAL,CAHU,EAIf,YAAM;AACJoE,cAAAA,cAAc,CAAClC,WAAD,EAAciB,MAAd,EAAsBkB,cAAtB,CAAd;AACD,aANc,CAAjB;AAQAA,YAAAA,cAAc,CAAClB,MAAf,GAAwBA,MAAxB;AAvBG;AAAA,mBAwBG0B,sBAAsB,CAACR,cAAD,CAxBzB;;AAAA;AAAA,8CAyBIA,cAzBJ;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,G","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"}
|